第二场比赛来自哪里?

时间:2012-05-17 02:09:42

标签: javascript regex string-matching

我有这段代码,当我删除g小旗标志时,它匹配额外的fox

var str = "...brown #fox jumped...";

var arr1 = str.match(/#([^\s]+)/g); //["#fox"]
var arr2 = str.match(/#([^\s]+)/); //["#fox", "fox"]

console.log(arr1.join(", ")); //#fox
console.log(arr2.join(", ")); //#fox, fox

<子> (source of code)

demo

我不知道发生了什么事,欢迎任何启发我的事情

2 个答案:

答案 0 :(得分:4)

第一项是与整个正则表达式匹配的字符串。所有下一个项目都是大括号(...)

内匹配的对应值

PS:[^\s]可写为[\S]

答案 1 :(得分:2)

第二个fox实际上并不匹配。这是一个被捕获的群体。默认情况下,括号构成一个捕获组。因此,在您的示例中,fox是括号内匹配的内容,而#fox是整个匹配。

要编写没有捕获组的正则表达式,请执行以下操作:

#\S+

您还可以使用以下语法指定非捕获组:

#(?:\S+)

全局标志阻止捕获组捕获,因为如果设置了全局标志,则字符串匹配功能不会获取捕获的组。 Regex exec函数将获取捕获组,如this question and answer中所述。