说我有字符串Hello {{name}}, how are you doing today?
我正试图从该字符串中抓取name
。
到目前为止,我有/\{{2}[a-z0-9]*\}{2}/gi
。问题是,它抓住了{{name}}
而不是name
。没有全局标志它工作正常,但我试图让双括号内的每个单词实例,所以它不太正确...我不是RegEx专业人士所以我希望有人可以帮助我...
答案 0 :(得分:4)
最好的解决方案是使用外观断言,因此{{
和}}
不会被拾取,但JavaScript正则表达式不支持lookbehind,它只支持前瞻。
因此,另一种方法是将文本放在捕获组中并抓住内部的内容:
/\{{2}([a-z0-9]*)\}{2}/gi
要获取每次捕获,请使用正则表达式创建一个RegExp
对象,并迭代其exec()
函数的结果。例如:
var str = 'Hello {{name}}, how are you doing {{date}}?';
var re = /\{{2}([a-z0-9]*)\}{2}/gi;
var words = [];
var match;
while (match = re.exec(str)) {
words.push(match[1]);
}
或者正如Gumbo在评论中建议的那样,从您的匹配数组中手动删除{{
和}}
。
答案 1 :(得分:0)
如上所述,2个开始和结束括号上的模式匹配是要走的路(假设名称本身没有2个花括号,无论是打开/关闭)
/\{{2}([a-z0-9]+)*\}{2}/gi