如何用正则表达式匹配多个字符串?
在这里我想同时匹配name
and txt
,但只name
匹配?
var reg = new RegExp('%([a-z]+)%', "g");
reg.exec('%name% some text %txt%');
如何用正则表达式匹配多个字符串?
在这里我想同时匹配name
and txt
,但只name
匹配?
var reg = new RegExp('%([a-z]+)%', "g");
reg.exec('%name% some text %txt%');
改用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]);
您需要使用String.match
而不是exec
:
'%name% some text %txt%'.match(reg);
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
到控制台。
这里的例子