Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用RegExp和存储值(JavaScript)匹配多个实例_Javascript_Regex_Pattern Matching - Fatal编程技术网

使用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);
}