【问题标题】:Regular Expression Star Symbol正则表达式星号
【发布时间】:2011-07-29 06:05:25
【问题描述】:

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

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

【问题讨论】:

  • 根据regexpal.com,使用“lorem ipsum 12345 dolor”和“\d*”作为字符串/正则表达式,它匹配得很好......你用什么语言使用你的正则表达式?
  • @Nightfirecat - 看起来像 JavaScript。

标签: regex regular-language


【解决方案1】:

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

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

【讨论】:

  • 非常感谢,这说明了一切。
  • @Tim Pietzcker - 感谢您发现我的错字!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2022-11-29
    相关资源
    最近更新 更多