Javascript正则表达式是否包含隐式^?

时间:2010-11-11 17:52:51

标签: javascript regex

我认为两个例子中的结果应该相同(“0”),但事实并非如此。为什么呢?

"0 Y".match(/[0-9]*/) // returns "0"

"Y 0".match(/[0-9]*/) // returns ""

3 个答案:

答案 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+/)