match、matchAll、g标志,看完不再晕

5,376 阅读2分钟

本人对matchmatchAll、正则表达式中有g标志、正则表达式中没有g标志,这四种情况交叉出现时拿到的结果一直很晕菜。今天就来捋一捋match加g标志、match不加g标志、matchAll加g标志、matchAll不加g标志,这四种组合情况分别返回什么结果。

matchmatchAll的区别


1、match返回值是一个数组,如果没有任何匹配项则返回nullmatchAll返回迭代器,要想查看其结果需要遍历迭代器。

2、match匹配到第一个匹配项后即停止匹配;matchAll会匹配出字符串中所有的匹配项。

正则表达式中g标志的作用


g标志表示全局搜索,如果定义正则表达式时没有g修饰,则只返回首个匹配的结果。否则返回所有匹配结果。

示例


以上,可以看出matchmatchAll、加g标志和不加g标志,这两组似乎有异曲同工之妙,那它们的区别又是怎样的呢?

说明:

  1.对于match来说,如果正则表达式中有g修饰,结果返回所有与正则表达式匹配的字符串的列表。捕获项会被忽略!

  2.对于match来说,如果正则表达式中没有g修饰,结果除了返回第一个匹配外,还会列出其所有捕获项!

  3.对于matchAll来说,如果正则表达式有g修饰,其返回的迭代项是一个个的数组,数组中除了包含匹配的完整字符串和所有捕获项外,还包含有indexinputgroups这三个属性,index表示当前匹配项在原字符串中的索引位置,input表示输入的原始字符串,groups是一个包含所以分组的对象。

  4.对于matchAll来说,如果正则表达式没有g修饰,其结果信息与第3点中描述的完全一致。但其迭代项只有一项,即首个匹配项。