使用正则表达式来拉出字符串的一部分

时间:2013-10-04 20:54:12

标签: javascript regex

我无法弄清楚如何从以下示例中提取多个匹配项:

此代码:

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

返回:

["prefix-firstname", "firstname"]

如何让它返回:

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

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

3 个答案:

答案 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+)/) })