正则表达式中的短划线

时间:2014-05-28 14:12:45

标签: javascript regex

根据文档,String.prototype.match()必须返回字符串中正则表达式的所有匹配项。但是,

"Foo 09:00 bar 21-00 foobar".match(/\d{2}[:\-]\d{2}/)

仅返回["09:00"],而预期结果为["09:00", "21:00"]。为什么呢?

顺便说一下,

"Foo 09:00 bar 21-00 foobar".split(/\d{2}[:\-]\d{2}/)

返回["Foo ", " bar ", " foobar"],这意味着21-00与正则表达式匹配。

2 个答案:

答案 0 :(得分:5)

您缺少g(全局)修饰符。使用它。

如果不这样做,它将在第一场比赛时停止。

像这样:

"Foo 09:00 bar 21-00 foobar".match(/\d{2}[:-]\d{2}/g)

此外,如果它位于字符类的开头或结尾,则无需转义-

您提到的MDN document也说:

  
      
  1. 返回与RegExp.exec(str)相同的结果[即捕获的组,索引等]如果正则表达式不包含g   标志
  2.   如果正则表达式包含g标志,则
  3. 返回包含所有匹配项的数组   

答案 1 :(得分:3)

根据文件String.prototype.match()

  
      
  • 返回与RegExp.exec(str)相同的结果[即如果正则表达式不包含g标志
  • ,则捕获的组,索引等]   如果正则表达式包含g标志,则
  • 返回包含所有匹配项的数组   
> "Foo 09:00 bar 21-00 foobar".match(/\d{2}[:\-]\d{2}/)
Array ["09:00", index:4, input:"Foo 09:00 bar 21-00 foobar"]
> "Foo 09:00 bar 21-00 foobar".match(/\d{2}[:\-]\d{2}/g)
Array ["09:00", "21-00"]