使用RegExp和存储值匹配多个实例(JavaScript)

时间:2015-01-07 01:23:49

标签: javascript regex pattern-matching

我想将所有值与此模式匹配:@[\S]+。这将用于在评论中@之后获取所有名称。例如:

Here are some people: @Name1, @Name2, @Name3, @Name4

应该返回:["Name1", "Name2", "Name3", "Name4"]

我尝试使用comment.match(/@[\S]+/ig),但这会返回一个带有@符号的数组。我试图用括号封装模式:comment.match(/@([\S]+)/ig)但这也无济于事。可能有超过10个匹配的名称,因此无法使用RegExp,我宁愿不必遍历数组并将其删除。

帮助赞赏:)。

2 个答案:

答案 0 :(得分:1)

使用正面看法

 /(?<=@)\S+/

/编辑 我读过JavaScript并不支持lookbehinds。所以我建议使用:

result.map(function(a) {a.slice(1)})

每个

答案 1 :(得分:1)

作为@KrzysztofWende,您可以使用后面的方法,或者您可以使用捕获组:

使用正则表达式:

/@(\w+)/ig

我将\S替换为\w,否则逗号(,)也会与Name1匹配。

然后代码为:

var myString = "Here are some people: @Name1, @Name2, @Name3, @Name4";
var myRegexp = /@(\w+)/ig;
var match = myRegexp.exec(myString);
alert(match[1]);//do something useful with match[1]

或者如果你需要迭代所有可能的匹配:

var myString = "Here are some people: @Name1, @Name2, @Name3, @Name4";
var myRegexp = /@(\w+)/ig;
var match = myRegexp.exec(myString);
while (match != null) {
    alert(match[1]);
    match = myRegexp.exec(myString);
}

该解决方案使用捕获组:它从1开始编号括号(0是总匹配)。在这种情况下,群组1因此为(\w+)

JSFiddle demo