也许我错过了一些东西,但这种常规表达有什么问题?
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”。 *
表示零个或多个匹配。
答案 0 :(得分:7)
\d*
匹配一行中的零个或多个数字。当你在正则表达式上运行exec
时,它会从输入的开头开始,并返回它找到的给定模式的第一个实例。
那个字符串中\d*
的第一个实例在哪里?好吧,它是字符串中第一个零或更多数字的位置。但他们所有后面都有零个或多个数字!那里有数字,或者没有数字,但无论哪种方式匹配。所以\d*
的第一个实例只是从字符串的第一个位置开始的零长度子字符串。
答案 1 :(得分:1)
*
匹配零或更多。也许我错了,但这不会匹配从“lorem”开始的零位数,因此空字符串?