如何匹配多个序列

时间:2012-11-19 11:48:22

标签: javascript regex

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

我想同时匹配nametxt,但只匹配name

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

3 个答案:

答案 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