正则表达式星符号

时间:2011-07-28 20:19:42

标签: regex regular-language

也许我错过了一些东西,但这种常规表达有什么问题?

var str = "lorem ipsum 12345 dolor";
var x = /\d+/.exec(str);
var y = /\d*/.exec(str);
console.log(x); // will print 12345
console.log(y); // will print "" but why ? 

请解释为什么/\d*/.exec(str);返回空字符串而不是“12345”。 *表示零个或多个匹配。

2 个答案:

答案 0 :(得分:7)

\d*匹配一行中的零个或多个数字。当你在正则表达式上运行exec时,它会从输入的开头开始,并返回它找到的给定模式的第一个实例。

那个字符串中\d*的第一个实例在哪里?好吧,它是字符串中第一个零或更多数字的位置。但他们所有后面都有零个或多个数字!那里有数字,或者没有数字,但无论哪种方式匹配。所以\d*的第一个实例只是从字符串的第一个位置开始的零长度子字符串。

答案 1 :(得分:1)

*匹配零或更多。也许我错了,但这不会匹配从“lorem”开始的零位数,因此空字符串?