有人能帮我理解为什么使用\d*返回一个包含空字符串的数组,而使用\d+却返回["100"](如预期)。我知道为什么\d+有效,但不明白为什么\d*无效。使用*是否导致它返回零长度的匹配项?这是如何工作的呢?
var str = 'one to 100';
var regex = /\d*/;
console.log(str.match(regex));
// [""]
有人能帮我理解为什么使用\d*返回一个包含空字符串的数组,而使用\d+却返回["100"](如预期)。我知道为什么\d+有效,但不明白为什么\d*无效。使用*是否导致它返回零长度的匹配项?这是如何工作的呢?
var str = 'one to 100';
var regex = /\d*/;
console.log(str.match(regex));
// [""]
记住,match
是在查找第一个与给定正则表达式匹配的子字符串。
*
表示可能有零个或多个某物,因此\d*
表示您正在查找包含零个或多个数字的字符串。
如果您的输入字符串以数字开头,则整个数字将匹配。
"5 to 100".match(/\d*/); // "5"
"5 to 100".match(/\d+/); // "5"
但是由于第一个字符不是数字,match()
函数认为字符串的开头(没有字符)与正则表达式相匹配。
由于您的字符串不以任何数字开头,因此空字符串是与该正则表达式匹配的输入的第一个子字符串。
[0-9]
或[[:digit:]]
代替\d
)。只有当正则表达式使用交替时,不同长度的匹配才会成为问题。 (参考) - Alan Moore/\d*/
/\d+
来进行“1个或多个”匹配。/\d+/
/\d*$/
在Python中,有一个findall()
方法,它返回与正则表达式匹配的字符串的所有部分。
re.findall(r'\d*', 'one to 100')
# => ['', '', '', '', '', '', '', '100', '']
.match()
是JavaScript中的一个函数,它只返回第一个匹配项,也就是上述数组中的第一个元素。
*
代表0次或多次匹配。如果要匹配1次或多次,需要使用+
。默认情况下是贪婪模式,因此会匹配100
:
var str = 'one to 100';
var regex = /\d+/;
console.log(str.match(regex));
// ["100"]
match
返回的'index'字段来判断正则表达式的匹配情况。例如,当我在Chrome中运行你的代码时,就会得到下面的结果:["", index: 0, input: "one to 100"]
\d*
可以在索引0处匹配一个空字符串,因此它会在那里返回一个匹配。 - nhahtdh