为什么我无法抓住子模式?当我希望输出undefined
时,控制台会显示hello
。如果我将matches[1]
更改为matches[0]
,我会{{hello}}
。那么,为什么我不能访问子模式?
var str = "{{hello}}";
var matches = str.match(/{{(.+)}}/ig);
console.log(matches[1]);
答案 0 :(得分:3)
尝试:
str.match(/{{(.+)}}/i);
代替。
答案 1 :(得分:2)
好像你正在寻找RegExp.exec
的行为。 MDN说明了这一点:
如果正则表达式不包含g标志,则返回与regexp.exec(字符串)相同的结果。 ... 如果正则表达式包含g标志,则该方法返回包含所有匹配项的数组。
由于你有g
标志,RegExp试图找到所有全局匹配(基本上忽略你的分组),返回['{{hello}}']
。
如果您删除g
标记(或者使用/{{(.+)}}/i.exec(str)
,则可以返回分组。