1

我不知道如何从以下示例中提取多个匹配项:

这段代码:

/prefix-(\w+)/g.exec('prefix-firstname prefix-lastname');

返回:

["prefix-firstname", "firstname"]

我如何让它返回:

[
   ["prefix-firstname", "firstname"],
   ["prefix-lastname", "lastname"]
]

或者

   ["prefix-firstname", "firstname", "prefix-lastname", "lastname"]
4

3 回答 3

4

这将做你想要的:

var str="prefix-firstname prefix-lastname";
var out =[];

str.replace(/prefix-(\w+)/g,function(match, Group) {

    var row = [match, Group] 
    out.push(row);

});

可能是对 .replace 的误用,但我认为您不能将函数传递给 .match ...

_佩斯

于 2013-10-04T21:23:21.110 回答
2

使用循环:

re = /prefix-(\w+)/g;
str = 'prefix-firstname prefix-lastname';
match = re.exec(str);
while (match != null) {
    match = re.exec(str);
}

您一次获得每场比赛。


使用匹配:

在这里,正则表达式必须有所不同,因为您无法获得子捕获(或者我不知道如何处理多个匹配项)...

re = /[^\s-]+(?=\s|$)/g;
str = 'prefix-firstname prefix-lastname';
match = str.match(re);
alert(match);

[^\s-]+匹配除空格和破折号/连字符之外的所有字符,前提是它们后跟空格或位于字符串末尾,这是(?=\s|$).

于 2013-10-04T21:15:58.793 回答
0

您可以通过两个步骤找到组:

"prefix-firstname prefix-lastname".match(/prefix-\w+/g)
.map(function(s) { return s.match(/prefix-(\w+)/) })
于 2013-10-04T21:53:29.710 回答