0

如何用正则表达式匹配多个字符串?

在这里我想同时匹配nameand txt,但只name匹配?

var reg = new RegExp('%([a-z]+)%', "g");
reg.exec('%name% some text %txt%');
4

3 回答 3

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]);
于 2012-11-19T11:51:50.400 回答
3

您需要使用String.match而不是exec

'%name% some text %txt%'.match(reg);
于 2012-11-19T11:51:57.587 回答
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到控制台。

这里的例子

于 2012-11-19T12:01:13.413 回答