我认为两个例子中的结果应该相同(“0”),但事实并非如此。为什么呢?
"0 Y".match(/[0-9]*/) // returns "0"
"Y 0".match(/[0-9]*/) // returns ""
答案 0 :(得分:4)
不,它没有隐含的^
。
*
表示匹配零个或多个字符,因为字符串开头有零个数字,匹配,并返回一个空字符串。
答案 1 :(得分:2)
我认为你所追求的是:
"0 Y".match(/[0-9]/) // returns "0"
"Y 0".match(/[0-9]/) // returns "0"
您当前的*
版本与0 或更多号码匹配...因此空字符串是匹配的。以此为例,以获得更清晰的视图:
"Y 0".match(/[0-9]*/g) // matches: "", "0", ""
答案 2 :(得分:0)
没有隐含的^
。但是,开头的空字符串与正则表达式/[0-9]*/
匹配,因此会返回""
。
您可以查看匹配过程(没有/g
标志),如下所示:
for (cursor in [0, 1, .. string.length-1])
if (the regex matches string.substr(cursor) with an implicit '^')
return the match;
return null;
"0 Y" -> find longest match for [0-9]* from the current cursor index (beginning)
-> found "0" with * = {1}
-> succeed, return.
"Y 0" -> find longest match for [0-9]* from the current cursor index (beginning)
-> found "" with * = {0}
-> succeed, return.
因此,您应该避免匹配空字符串的正则表达式。如果您需要匹配的数字,请使用+
。
"0 Y".match(/\d+/)