我有一个文件内容到内存中。在文件中,有以下形式的变量:
{{ _("variable1") }}
{{ _("variable2") }}
{{ _("variable3") }}
我试图用/\{\{ _(.+) \}\}/i
抓住他们:
var result = /\{\{ _(.+) \}\}/i.exec(fileContents);
它似乎首先工作,因为前两个变量被推入数组,但随后它推送整个文件内容。
我错过了什么?
BONUS:如果我能抓住 variable1 而不是 {{_(“variable1”)}} ,那真是太棒了但我可以和它一起生活。
答案 0 :(得分:2)
您需要的是g
标志。这样,每次拨打exec
时,您都会获得额外的匹配(直到没有其他匹配,并且您获得null
)。对于奖励,只需在模式中包含("
和")
,以便不会捕获它们。最后,您可能想要.+
不合适,否则如果在一行中多次出现此模式,您会得到有趣的惊喜:
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