如何将多个字符串与正则表达式匹配?
我想同时匹配name
和txt
,但只匹配name
?
var reg = new RegExp('%([a-z]+)%', "g");
reg.exec('%name% some text %txt%');
答案 0 :(得分:3)
改为使用match
:
'%name% %txt%'.match(reg); //["%name%", "%txt%"]
exec
仅检索第一个匹配(尽管有捕获组)。
如果捕获组对您很重要,您可以使用循环:
var matches = [];
var str = '%name% some text %txt%';
var reg = new RegExp('%([a-z]+)%', "g");
while (match = reg.exec(str)){
matches.push(match);
}
如果您只想保留捕获的组,请改用:
matches.push(match[1]);
答案 1 :(得分:3)
您需要使用String.match
代替exec
:
'%name% some text %txt%'.match(reg);
答案 2 :(得分:1)
g标志确实有效但需要多次在同一个字符串上执行
var reg = new RegExp('%([a-z]+)%', "g");
var str = '%name% some text %txt%';
var result;
while( result = reg.exec( str ) ) { // returns array of current match
console.log( result[1] ); // index 0 is matched expression. Thereafter matched groups.
}
以上输出name
& txt
到控制台。
示例here