我正试图找到括号之间的单词。
var str = "asdfasdfkjh {{word1}} asdf fff fffff {{word2}} asdfasdf";
var pattern = /{{\w*}}/g;
var str.match(pattern); // ["{{word1}}","{{word2}}"]
这会结束交易,但是用括号给它,我不想要它们。 当然,如果我在结果上使用原生替换,我可以删除它们。但我希望正则表达式也这样做。
我也尝试过: var pattern = /(?:{{)(\ w *)(?:}})/ g
但我找不到真正的优惠。你能帮帮我吗?
编辑:我可能需要添加单词是动态的注释
解决方案:
基于Tim Piezcker awnser,我带来了这个解决方案:
var arr = [],
re = /{{(\w?)}}/g,item;
while (item = re.exec(s))
arr.push(item[1]);
答案 0 :(得分:2)
在大多数正则表达式中,您可以使用外观断言:
(?<={{)\w*(?=}})
不幸的是,JavaScript不支持lookbehind断言,所以你不能使用它们。
但是你提出的正则表达式可以通过访问第一个捕获组来使用:
var pattern = /{{(\w*)}}/g;
var match = pattern.exec(subject);
if (match != null) {
result = match[1];
}
答案 1 :(得分:1)
一个快速而肮脏的解决方案是/[^{]+(?=\}\})/
,但如果省略前导括号,它将导致一些混乱,并且也将匹配{word1}}
。如果我没记错的话,JavaScript不支持look-behind,在这种情况下这有点遗憾。