我无法弄清楚如何从以下示例中提取多个匹配项:
此代码:
/prefix-(\w+)/g.exec('prefix-firstname prefix-lastname');
返回:
["prefix-firstname", "firstname"]
如何让它返回:
[
["prefix-firstname", "firstname"],
["prefix-lastname", "lastname"]
]
或
["prefix-firstname", "firstname", "prefix-lastname", "lastname"]
答案 0 :(得分: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 ......
_Pez
答案 1 :(得分: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|$)
强加的配置。
答案 2 :(得分:0)
您可以分两步找到这些组:
"prefix-firstname prefix-lastname".match(/prefix-\w+/g)
.map(function(s) { return s.match(/prefix-(\w+)/) })