正则表达式星号

发布于 2024-11-26 18:14:15 字数 321 浏览 1 评论 0原文

也许我错过了一些东西,但是这个正则表达式有什么问题吗?

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”。 * 表示零个或多个匹配项。

Maybe I have missed something, but what are wrong with this regular expresion?

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 ? 

Can you please explain why /\d*/.exec(str); returns an empty string instead of "12345". * means zero or more number of matches.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

当梦初醒 2024-12-03 18:14:15

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

那么该字符串中 \d* 的第一个实例在哪里?嗯,它是字符串中第一个位置,其后有零个或多个数字。但它们后面有零个或多个数字!那里要么有数字,要么没有,但无论哪种方式都匹配。因此 \d* 的第一个实例只是一个从字符串中第一个位置开始的零长度子字符串。

\d* matches zero or more digits in a row. When you run exec on a regex, it starts at the beginning of the input and returns the first instance it finds of your given pattern.

So where is the first instance of \d* in that string? Well, it's the first position in the string that has zero or more numbers after it. But they all have zero or more numbers after them! Either there are numbers there, or there aren't, but either way it matches. So the first instance of \d* is simply a zero-length substring beginning at the first position in the string.

塔塔猫 2024-12-03 18:14:15

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

* matches zero or more. Maybe I'm wrong, but wouldn't this match zero digits starting at "lorem", hence the empty string?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文