ホームページ ウェブフロントエンド jsチュートリアル 正規表現を使用した JSON 文字列の書式設定と強調表示_JavaScript スキル

正規表現を使用した JSON 文字列の書式設定と強調表示_JavaScript スキル

May 16, 2016 pm 04:29 PM
json文字列 フォーマット 正規表現 ハイライト

Json 文字列は非常に便利です。一部のバックグラウンド インターフェイスから返される情報は文字列形式であり、可読性が低い場合があります。この場合、Json 文字列をフォーマットして強調表示できるメソッドがあればさらに便利です。正規表現によって完成された JSON 文字列の書式設定と強調表示を見てみましょう

最初のステップは入力を変換することです。入力がオブジェクトの場合は、標準化された JSON 文字列に変換されます。オブジェクトでない場合は、まず文字列がオブジェクトに変換されます (非標準の文字列を防ぐため)。 , そして再度json文字列に変換します。ここで、json は入力です。

コードをコピーします コードは次のとおりです:

if (typeof json !== 'string') {
json = JSON.stringify(json);
} else {
json = JSON.parse(json);
json = JSON.stringify(json);
}

データを標準化した後、後続のセグメント化と再結合のために文字列をマークします

大括弧、括弧、カンマなど、タグを追加する必要がある場所がいくつかあります。ここでは改行を使用します。 n (これにより、コマンド ラインでテストしたときに効果がより良く表示されます)。

コードをコピーします コードは次のとおりです:

//中括弧の前後に改行を追加します
reg = /([{}])/g;
json = json.replace(reg, 'rn$1rn');
// 角括弧の前後に改行を追加します
reg = /([[]])/g;
json = json.replace(reg, 'rn$1rn');
// カンマの後に改行を追加します
reg = /(,)/g;
json = json.replace(reg, '$1rn');

完了マークを追加した後、いくつかの最適化処理を実行し、余分な改行を削除し、カンマの前の改行を削除する必要があります。これは、分割中に空の文字列が発生して無駄なループが発生するのを避けるためです。コロンの後を参照してください。

コードをコピーします コードは次のとおりです:

// 冗長な改行を削除
reg = /(rnrn)/g;
json = json.replace(reg, 'rn');
// カンマの前の改行を削除します
reg = /rn,/g;
json = json.replace(reg, ',');
//コロンの前のインデント
reg = /:/g;
json = json.replace(reg, ': ');

次のステップでは、この最初に処理された文字列をさらに処理し、インデントや整形などの各セグメンテーション単位を処理するロジックを function(index, node) {} 関数に追加します。

コードをコピーします コードは次のとおりです:

$.each(json.split('rn'), function(index, node) {});

まず、インデントについて説明します。インデントの方法は非常に簡単です。{、[記号に遭遇するとインデントが 1 ずつ増加し、}、] 記号に遭遇するとインデントが 1 ずつ減少します。金額は変わらず。

コードをコピーします コードは次のとおりです:

//{、[ここではインデントレベルは 1 増加します。}、] に遭遇するとインデントレベルは 1 減少し、遭遇しない場合はインデントレベルは変更されません
if (node.match(/{$/) || node.match(/[$/)) {
インデント = 1;
} else if (node.match(/}/) || node.match(/]/)) {
If (パッド !== 0) {
パッド -= 1;
}
} else {
インデント = 0;
}

インデントが完了したら、ここでいくつかの CSS ルールを使用して、セグメント化されたユニットを強調表示するときに、大括弧に一致するかどうかを判断します。オブジェクト クラスをマークし、角かっこで配列クラス、属性名、および属性値をマークします。これらの CSS ルールを一度に追加し、追加が完了した後に結合します。

コードをコピーします コードは次のとおりです:

.ObjectBrace{color:#00AA00;font-weight:bold;}
.ArrayBrace{color:#0033FF;font-weight:bold;}
.PropertyName{color:#CC0000;font-weight:bold;}
.String{color:#007777;}
.Number{color:#AA00AA;}
.Comma{color:#000000;font-weight:bold;}

コードをコピーします コードは次のとおりです:

//コードのハイライトを追加
node = node.replace(/([{}])/g,"$1");
node = node.replace(/([[]])/g,"$1");
node = node.replace(/(".*")(:)(.*)(,)?/g,"$1$2$3$4");
node = node.replace(/"([^"]*)"(,)?$/g,""$1"$2");
node = node.replace(/(-?d )(,)?$/g,"$1$2< /span>");

最後に、完全なメソッド コード (ここでは jquery クラス ライブラリを使用しました) とテスト アドレスを見てみましょう:

jsonstr を美しくするには、APP.format(jsonstr) を使用して、それを

 タグに直接出力して、その効果を確認します。

以下はテスト アドレスです。http://iforever.sinaapp.com/ アクセスして試してみると、完全なソース コードを確認できます

コードをコピー コードは次のとおりです:

<スクリプト>
var APP=関数(){
var format=function(json){
var reg=null,
result='';
パッド=0,
PADDING=' If (typeof json !== 'string') {
json = JSON.stringify(json);
} else {
json = JSON.parse(json);
json = JSON.stringify(json);
}
// 中かっこの前後に改行を追加します
reg = /([{}])/g;
json = json.replace(reg, 'rn$1rn');
// 角括弧の前後に改行を追加します
reg = /([[]])/g;
json = json.replace(reg, 'rn$1rn');
//コンマの後に新しいラインを追加します
reg = /(,)/g;
json = json.replace(reg, '$1rn');
// 余分な変更を削除
reg = /(rnrn)/g;
json = json.replace(reg, 'rn');
//カンマの前の改行を削除
reg = /rn,/g;
json = json.replace(reg, ',');
//コロンの前のインデント
reg = /:/g;
json = json.replace(reg, ': ');
// 改行に従って json を分割し、それぞれの小さな部分を処理します
$.each(json.split('rn'), function(index, node) {
var i = 0,
インデント = 0,
パディング = '';
// ここで、{、[ が出現するとインデント レベルは 1 増加し、}、] が出現するとインデント レベルは 1 減少し、出現しない場合はインデント レベルは変更されません
If (node.match(/{$/) || node.match(/[$/)) {
インデント = 1;
} else if (node.match(/}/) || node.match(/]/)) {
If (パッド !== 0) {
パッド -= 1;
}
} else {
インデント = 0;
                }
                   //padding保存实际的缩进
                for (i = 0; i                     パディング = PADDING;
                }
                //添加代码高亮
                node = node.replace(/([{}])/g,"$1");
                node = node.replace(/([[]])/g,"$1");
                node = node.replace(/(".*")(:)(.*)(,)?/g,"$1$2$3$4");
                node = node.replace(/"([^"]*)"(,)?$/g,""$1"$2");
                node = node.replace(/(-?d )(,)?$/g,"$1$2< /span>");
                result = パディングノード '
';
                パッド = インデント;
            });
            結果を返します;
        };
        戻り値 {
            "形式":形式,
        };
    }();

怎么样,json 文字列は美观了多呢、超級実用的、この素晴らしい商品、当然のことながら単独で共有することはできません、ここで推奨されています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

dosコマンドでCドライブをフォーマットする方法 dosコマンドでCドライブをフォーマットする方法 Feb 19, 2024 pm 04:23 PM

DOS コマンドは、Windows オペレーティング システムで使用されるコマンド ライン ツールで、さまざまなシステム管理タスクや操作を実行するために使用できます。一般的なタスクの 1 つは、C ドライブを含むハード ドライブをフォーマットすることです。 C ドライブのフォーマットは、C ドライブ上のすべてのデータを消去し、ファイル システムを再初期化するため、比較的危険な操作です。この操作を実行する前に、重要なファイルをバックアップしていることを確認し、フォーマットがコンピュータに与える影響を明確に理解してください。以下は DOS コマンドラインでフォーマットされます。

携帯電話のフォーマット復元方法の秘密を公開(携帯電話の故障?心配しないでください) 携帯電話のフォーマット復元方法の秘密を公開(携帯電話の故障?心配しないでください) May 04, 2024 pm 06:01 PM

現在では、電源が入らない、システムクラッシュなどの遅延が発生することは避けられませんが、使用中に携帯電話は私たちの生活に欠かせないものとなっています。私たちはしばしば途方に暮れますが、時にはこれらの問題に対する解決策が見つからないこともあります。携帯電話の問題を解決するために、この記事では携帯電話のフォーマットを回復し、携帯電話を通常の動作に戻すいくつかの方法を紹介します。データをバックアップする - 携帯電話をフォーマットする前に、写真や連絡先などの重要な情報が失われないように、携帯電話上の重要なデータとファイルをバックアップすることを検討してください。データのセキュリティを確保するため、またはファイルをクラウド ストレージ サービスに転送することを選択するために、コンピューターに接続してファイルをバックアップできます。システム内蔵の回復機能を使用する - シンプル

ラップトップをフォーマットすると速度が速くなりますか? ラップトップをフォーマットすると速度が速くなりますか? Feb 12, 2024 pm 11:54 PM

ラップトップをフォーマットすると速度が速くなりますか? Windows ラップトップをフォーマットしたいが、それによって速度が向上するか知りたい場合は、この記事がこの質問に対する正しい答えを知るのに役立ちます。ラップトップをフォーマットすると速度が速くなりますか?ユーザーが Windows ラップトップをフォーマットする理由はたくさんあります。しかし、最も一般的な理由は、ラップトップのパフォーマンスまたは速度が遅いことです。ラップトップをフォーマットすると、Windows オペレーティング システムがインストールされている C ドライブまたはハード ドライブ パーティションに保存されているすべてのデータが完全に削除されます。したがって、すべてのユーザーは、特にラップトップのパフォーマンスに関しては、このステップを実行する前によく考えます。この記事は、ラップトップをフォーマットすると速度が向上するかどうかを理解するのに役立ちます。ラップトップをフォーマットすると便利です

PHP 正規表現の検証: 数値形式の検出 PHP 正規表現の検証: 数値形式の検出 Mar 21, 2024 am 09:45 AM

PHP 正規表現の検証: 数値形式の検出 PHP プログラムを作成する場合、ユーザーが入力したデータを検証する必要がよくあります。一般的な検証の 1 つは、データが指定された数値形式に準拠しているかどうかを確認することです。 PHP では、正規表現を使用してこの種の検証を行うことができます。この記事では、PHP 正規表現を使用して数値形式を検証する方法を紹介し、具体的なコード例を示します。まず、一般的な数値形式の検証要件を見てみましょう。 整数: 0 ~ 9 の数字のみが含まれ、プラスまたはマイナス記号で始めることができ、小数点は含まれません。浮動小数点

正規表現を使用して Golang でメールアドレスを検証するにはどうすればよいですか? 正規表現を使用して Golang でメールアドレスを検証するにはどうすればよいですか? May 31, 2024 pm 01:04 PM

正規表現を使用して Golang で電子メール アドレスを検証するには、次の手順に従います。 regexp.MustCompile を使用して、有効な電子メール アドレス形式と一致する正規表現パターンを作成します。 MatchString 関数を使用して、文字列がパターンと一致するかどうかを確認します。このパターンは、次のようなほとんどの有効な電子メール アドレス形式をカバーします。 ローカル ユーザー名には文字、数字、および特殊文字を含めることができます: !.#$%&'*+/=?^_{|}~-` ドメイン名には少なくとも次の文字が含まれている必要があります。 1 文字の後に文字、数字、またはハイフンを続けます。トップレベル ドメイン (TLD) は 63 文字を超えることはできません。

HTMLの整形にはどのような方法があるのでしょうか? HTMLの整形にはどのような方法があるのでしょうか? Mar 08, 2024 am 09:53 AM

HTML 書式設定方法: 1. オンライン HTML 書式設定ツールを使用する; 2. コード エディターに付属する HTML 書式設定ショートカット キー (Visual Studio Code の Shift + Alt + F など) を使用する; 3. Sublime Text などのプラグインを使用するHTML/CSS/JS Prettify プラグイン; 4. HTML Tidy などのコマンド ライン ツールを使用します; 5. コーディング標準と習慣に従って手動で書式設定します。

PHP 正規表現: 厳密な一致とあいまいな包含の除外 PHP 正規表現: 厳密な一致とあいまいな包含の除外 Feb 28, 2024 pm 01:03 PM

PHP 正規表現: 完全一致と除外 ファジー包含正規表現は、プログラマがテキストを処理する際に効率的な検索、置換、フィルタリングを実行できる強力なテキスト マッチング ツールです。 PHP では、正規表現は文字列処理やデータ マッチングにも広く使用されています。この記事では、PHP で完全一致を実行し、あいまい包含操作を除外する方法に焦点を当て、具体的なコード例を使用して説明します。完全一致 完全一致とは、バリエーションや余分な単語ではなく、正確な条件を満たす文字列のみと一致することを意味します。

Go で正規表現を使用してタイムスタンプを照合するにはどうすればよいですか? Go で正規表現を使用してタイムスタンプを照合するにはどうすればよいですか? Jun 02, 2024 am 09:00 AM

Go では、正規表現を使用してタイムスタンプを照合できます。ISO8601 タイムスタンプの照合に使用されるような正規表現文字列をコンパイルします。 ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ 。 regexp.MatchString 関数を使用して、文字列が正規表現と一致するかどうかを確認します。

See all articles