我有这段代码,当我删除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) 子>
我不知道发生了什么事,欢迎任何启发我的事情
答案 0 :(得分:4)
第一项是与整个正则表达式匹配的字符串。所有下一个项目都是大括号(...)
PS:[^\s]
可写为[\S]
答案 1 :(得分:2)
第二个fox
实际上并不匹配。这是一个被捕获的群体。默认情况下,括号构成一个捕获组。因此,在您的示例中,fox
是括号内匹配的内容,而#fox
是整个匹配。
要编写没有捕获组的正则表达式,请执行以下操作:
#\S+
您还可以使用以下语法指定非捕获组:
#(?:\S+)
全局标志阻止捕获组捕获,因为如果设置了全局标志,则字符串匹配功能不会获取捕获的组。 Regex exec函数将获取捕获组,如this question and answer中所述。