Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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/16.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
Javascript 第二场比赛是从哪里来的?_Javascript_Regex_String Matching - Fatal编程技术网

Javascript 第二场比赛是从哪里来的?

Javascript 第二场比赛是从哪里来的?,javascript,regex,string-matching,Javascript,Regex,String Matching,我有这样一个代码,当我删除global标志时,它匹配一个额外的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,

我有这样一个代码,当我删除
g
lobal标志时,它匹配一个额外的
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


我不知道发生了什么,任何能启发我的东西都是受欢迎的

第一项是匹配整个正则表达式的字符串。接下来的所有项目都是大括号中匹配项的对应值
(…)


PS:
[^\s]
可以写成
[\s]

第一项是匹配整个正则表达式的字符串。接下来的所有项目都是大括号中匹配项的对应值
(…)


PS:
[^\s]
可以写成
[\s]

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

要在不使用捕获组的情况下写入正则表达式,请执行以下操作:

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

#(?:\S+)

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

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

要在不使用捕获组的情况下写入正则表达式,请执行以下操作:

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

#(?:\S+)

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

可能值得一提的是,
match
在(未)使用
g
标志时表现不同:@Andrew Whitaker:如果有解释就值得了。我找不到任何官方解释,但从我的角度来看,这是显而易见的。我不确定这是否完全解释了为什么会发生这种情况(或者至少我没有看到),PS:I+1,因为您的PSP可能值得一提的是,
match
g
标记为(非)时的行为不同使用:@Andrew Whitaker:如果有解释就值得了。我找不到任何官方解释,但从我的角度来看,这是显而易见的。我不确定这是否完全解释了为什么会发生这种情况(或者至少我不知道),PS:I+1是因为你的PSA,但为什么只添加了没有全球标志的组,我看不出检查次数少的东西如何返回多个全局falg,但为什么只添加了没有全局标志的组,我看不出检查次数少的东西如何返回多个全局falg