Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 - Fatal编程技术网

Javascript 为什么它会这样返回匹配

Javascript 为什么它会这样返回匹配,javascript,regex,Javascript,Regex,我测试了以下代码: var str1 = 'chapter 4.5.3.1' var rslt = str1.match(/(\.\d)*/g) console.log(rslt) 它还给我一对 ["", "", "", "", "", "", "", "", "", ".5.3.1", ""] 如果我去 var str1 = 'chapter 4.5.3.1' var rslt = str1.match(/(\.\d)*/) console.log(rslt) 它给了我: ["", u

我测试了以下代码:

var str1 = 'chapter 4.5.3.1'
var rslt = str1.match(/(\.\d)*/g)
console.log(rslt)
它还给我一对

["", "", "", "", "", "", "", "", "", ".5.3.1", ""] 
如果我去

var str1 = 'chapter 4.5.3.1'
var rslt = str1.match(/(\.\d)*/)
console.log(rslt)
它给了我:

["", undefined, index: 0, input: "chapter 4.5.3.1"] 
有人能给我解释一下这些匹配结果吗,特别是第一个例子,为什么会返回这么多空字符串。第二个匹配,返回一个空字符串。谢谢。

\.\d*实际上意味着,匹配组\.\d零次或多次。由于匹配在每个字符之前都有零次可用,因此它会为所有零匹配返回一个空字符串。您必须将其更改为\.\d+,这意味着要匹配组一次或多次

如果您实际上只想匹配版本号,那么可以使用

/\d+(\.\d+)*/

在第一种情况下,返回空字符串,因为您使用的是*量词0或更多,而不是+量词1或更多


因此,您的模式被允许多次匹配空字符串。请注意,在第一次非空匹配之前的结果中,空字符串的数量为9,在第一次匹配超过零个字符之前,空字符串的数量是相同的。这是因为正则表达式在每个位置匹配空字符串。

*将前面的标记重复零次或多次。将全局标志与正则表达式一起使用时,除了与模式匹配的字符外,每个字符都会得到一个空字符串作为匹配项。如果删除全局标志,它将仅在第一次匹配空字符串,因为正则表达式引擎在第一次匹配后停止匹配。因此,在删除g标志后,只有一个空字符串作为匹配项。

如果您试图仅捕获数值,那么沿着这些行应该可以工作

\d*\d*?=[^\d]|$

*可能是一只狡猾的野兽。

想想看:a*与输入b匹配吗?哪里?相关的