根据文档,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
与正则表达式匹配。
答案 0 :(得分:5)
您缺少g
(全局)修饰符。使用它。
如果不这样做,它将在第一场比赛时停止。
像这样:
"Foo 09:00 bar 21-00 foobar".match(/\d{2}[:-]\d{2}/g)
此外,如果它位于字符类的开头或结尾,则无需转义-
。
您提到的MDN document也说:
- 返回与RegExp.exec(str)相同的结果[即捕获的组,索引等]如果正则表达式不包含
如果正则表达式包含g标志,则g
标志- 返回包含所有匹配项的数组 醇>
答案 1 :(得分:3)
- 返回与
,则捕获的组,索引等] 如果正则表达式包含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"]