1

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

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

2 回答 2

2

在大多数正则表达式风格中,您可以使用环视断言:

(?<={{)\w*(?=}})

不幸的是,JavaScript 不支持后向断言,因此您不能使用它们。

但是您建议的正则表达式可以通过访问第一个捕获组来使用:

var pattern = /{{(\w*)}}/g;
var match = pattern.exec(subject);
if (match != null) {
    result = match[1];
} 
于 2012-09-14T11:23:12.570 回答
1

一个快速而肮脏的解决方案是/[^{]+(?=\}\})/,但是如果省略前大括号会导致一些混乱,并且也会匹配{word1}}。如果我没记错的话,JavaScript 不支持后视,在这种情况下有点遗憾。

于 2012-09-14T11:21:58.287 回答