0

私はファイルの内容をメモリに持っています。ファイル内には、次の形式の変数があります。

{{ _("variable1") }}
{{ _("variable2") }}
{{ _("variable3") }}

私はそれらをキャッチしようとしています/\{\{ _(.+) \}\}/i:

var result = /\{\{ _(.+) \}\}/i.exec(fileContents);

最初の 2 つの変数が配列にプッシュされるため、最初は機能するように見えますが、その後、ファイルの内容全体がプッシュされます。

私は何が欠けていますか?

ボーナス: {{ _("variable1") }}の代わりにvariable1を取得できれば最高ですが、それでも問題ありません。

4

1 に答える 1

2

必要なのはg旗です。このようにして、呼び出すたびに追加の一致を取得しますexec(それ以上の一致がなく、 を取得するまでnull)。おまけとして、パターンに("andを含めるだけで、それらがキャプチャされなくなります。そうしないと、このパターンが 1 行に複数回出現すると、おかしな驚きが生じます").+

r = /\{\{ _\("(.+?)"\) \}\}/ig;
while(m = r.exec(fileContents)
{
    // m[0] will contain the entire match
    // m[1] will contain the contents of the quotes
}

ちなみに、"variable1"エスケープされた引用符 ( など"some\"oddvariable") を含めることができない場合は、この正規表現の方が少し効率的です。

r = /\{\{ _\("([^"]*)"\) \}\}/ig
于 2013-07-01T14:00:30.183 に答える