使用RegExp和存储值(JavaScript)匹配多个实例
我希望将所有值与此模式匹配:使用RegExp和存储值(JavaScript)匹配多个实例,javascript,regex,pattern-matching,Javascript,Regex,Pattern Matching,我希望将所有值与此模式匹配:@[\S]+。这将用于获取注释中@后面的所有名称。例如: 这里有一些人:@Name1、@Name2、@Name3、@Name4 应返回:[“Name1”、“Name2”、“Name3”、“Name4”] 我尝试使用comment.match(/@[\S]+/ig),但这会返回一个带有@符号的数组。我曾尝试用括号封装该模式:comment.match(/@([\S]+)/ig),但这也没用。匹配的名称可能超过10个,因此无法使用RegExp,我不希望遍历数组并将其删除
@[\S]+
。这将用于获取注释中@
后面的所有名称。例如:
这里有一些人:@Name1、@Name2、@Name3、@Name4
应返回:[“Name1”、“Name2”、“Name3”、“Name4”]
我尝试使用comment.match(/@[\S]+/ig)
,但这会返回一个带有@
符号的数组。我曾尝试用括号封装该模式:comment.match(/@([\S]+)/ig)
,但这也没用。匹配的名称可能超过10个,因此无法使用RegExp,我不希望遍历数组并将其删除
感谢您的帮助:)。使用积极的回头看
/(?<=@)\S+/
在每个@KrzysztofWende上,您可以使用后看方法,也可以使用捕获组: 对于正则表达式:
/@(\w+)/ig
我将\S
替换为\w
,因为除此之外,逗号(,
)也与名称1
匹配
然后代码是:
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+)
.什么是不能使用RegExp?我的意思是
RegExp.$x
。这似乎给出了一个语法错误:未捕获的语法错误:无效的正则表达式:/(?我刚刚读到Javascript regexp不支持lookbehinds。没有办法then@KrzysztofWende:当然可以,使用捕获组。@KrzysztofWende:此外,您可能最好将\S
替换为\w
,否则逗号(,
)也会被捕获。@CommuSoft是的。我太信任OP;)
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);
}