0

我有一个文件内容到内存中。在文件中,有以下形式的变量:

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

我试图抓住他们/\{\{ _(.+) \}\}/i

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

一开始它似乎有效,因为前两个变量被推入数组,但随后它会推入整个文件内容。

我错过了什么?

奖励:如果我能抓住variable1而不是{{ _("variable1") }}那就太棒了,但我可以忍受它。

4

1 回答 1

2

你需要的是g国旗。这样,您每次调用时都会获得额外的匹配项exec(直到没有更多匹配项,并且您得到null)。对于奖金,只需在模式中包含("and "),这样它们就不会被捕获。最后,你可能想要不.+贪婪,否则如果在一行中多次出现这种模式,你会得到有趣的惊喜:

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 回答