2017-05-13 2 views
0

私は正規表現にはあまり強くなく、私の予期せぬ入力に失敗した私の自転車で手で書かれたパーサーで問題を解決しようとしましたが、問題は次のようなものです:JavaScriptのi18nファイルは、翻訳と一緒に、ファイルのどこかで定義される他の設定情報を含んでいます(それが手作りのパーサーで問題を処理するのが難しい主な理由です)。翻訳ラベルのJava以外の何ものでもない、キーと値のJSONのように定義されている - 上記の例では、唯一可能なテンプレートの中の選択肢の一つですが、それらはすべて一つの共通点を持っているがファイルから正規表現を使ってJSONのキー値マップを抽出する

(function() { 
    'use strict'; 
    //some configuration stuff (some other stuff may be insterted) 
    var translations = angular.module('module.translations.languages.enUs', []); 

    translations.constant('translationsName', { 
    "first_label":"first_label_value", 
    "second_label":"second_label_value" 
    //etc 
}); 

}()); 

:ファイルには、そのようなものですJsonにシリアル化されたマップ。 私の目標は、ファイルからこれらのkey-value jsonだけを取得し、それをマップにデシリアライズし、いくつかの操作を行い、再びそれを挿入することです。だから問題は:誰かがこの種の状況に対処する準備ができて証明された正規表現を持っているかもしれない - テキストのキー値jsonのマップを見つけるだろうか?もしそうなら、私は本当にそれに感謝します! おかげで、 乾杯、 アンドレイ

答えて

1

あなたは"key":"value"ペアを見つけるために、この正規表現を使用することができます。

"([^"]+)"\s*:\s*"([^"]+)",?

グループ1が鍵となり、グループ2は値

ですまた、"key": "value","key" :"value"または"key" : "value"のペアが見つかります。

Demo on regexplanetのJavaボタンをクリックしテストボタンをクリックしてください)

またdemo regex101上

説明

"([^"]+)":間の任意の文字が、二重引用符をキャプチャ二重引用符(これはのキーです)

\s*?は:コロン

\s*:ゼロ個以上の空白

\s*が続く続くゼロ個以上の空白

"([^"]+)":任意の文字が、二重の間に二重引用符をキャプチャ-quotes(これはの値です)

+0

@ andrey-yaskulskyはうまくいきましたか? –

+0

私も同様の問題がありました。私はあなたの正規表現を使用し、それは私のために働いた。ありがとう。 – PKR

+0

素晴らしい!あなたのフィードバックのためにThanx。 –

関連する問題