Javascript RegEx查找条件但没有显示它们

时间:2012-09-14 11:12:57

标签: regex grouping conditional-statements

我正试图找到括号之间的单词。

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]);

2 个答案:

答案 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,在这种情况下这有点遗憾。