【问题标题】:Can you retrieve multiple regex matches in JavaScript?你能在 JavaScript 中检索多个正则表达式匹配吗?
【发布时间】:2011-09-28 02:30:48
【问题描述】:

我在 JavaScript 中有以下正则表达式,它匹配“12:23:34:45”和“12:23”等字符串

/^([0-9]{1,2}\:){0,3}([0-9]{0,2})?$/

我遇到的问题是,当我查看匹配数据时,只返回 3 个匹配项。例如对于 12:23:34:45,返回的匹配项是:

12:23:34:45
34:
45

即第一个捕获组仅报告其最后一个值。我希望比赛是:

12:23:34:45
12:
23:
34:
45

这可能吗?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    不,这在 JavaScript(以及除 Perl 6 和 .NET 之外的大多数其他正则表达式风格)中是不可能的。重复捕获组始终存储匹配的最后一个值。只有 .NET 和 Perl 允许您单独访问这些匹配项(例如,.NET 中的match.Groups(i).Captures)。

    您需要两次遍历,第一次查找字符串,第二次遍历匹配项并扫描它们的子值。

    或者使正则表达式显式:

    /^([0-9]{1,2}:)?([0-9]{1,2}:)?([0-9]{1,2}:)?([0-9]{0,2})?$/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多