什么应该是匹配字符串开头的正则表达式

时间:2016-12-29 08:42:23

标签: javascript regex

我有一个类似的字符串,我想只匹配每个{{xxxx}}模式的第一个'{'

{ {ABCD}}的 { {EFG}}的 { {HIJ}}

{ {ABCD}}的 { {EFG}}的 { {HIJ}}的 {

我尝试使用/(\s|^|.){/g,但此模式与

匹配

{ {ABCD}的} { {EFG}的} { {HIJ}}

有人能引导我朝着正确的方向前进吗?

1 个答案:

答案 0 :(得分:1)

您需要使用/(^|[^{]){/g(匹配并捕获到第1组字符串开头或除{以外的任何字符,然后匹配{)并检查是否为组每次RegExp#exec次迭代时匹配1次。然后,如果组1匹配,则增加匹配索引:

var re = /(^|[^{]){/g;
var str = "{{abcd}}{{efg}}{{hij}}\n{{abcd}}{{efg}}{{hij}}{";
//         0       8      15       23      31     38     45
var m, indices = [];
while ((m = re.exec(str)) !== null) {
    indices.push(m.index + (m[1] ? 1 : 0));
}
console.log(indices);