本人对match
、matchAll
、正则表达式中有g标志、正则表达式中没有g标志,这四种情况交叉出现时拿到的结果一直很晕菜。今天就来捋一捋match
加g标志、match
不加g标志、matchAll
加g标志、matchAll
不加g标志,这四种组合情况分别返回什么结果。
match
和matchAll
的区别
1、match
返回值是一个数组,如果没有任何匹配项则返回null
;matchAll
返回迭代器,要想查看其结果需要遍历迭代器。
2、match
匹配到第一个匹配项后即停止匹配;matchAll
会匹配出字符串中所有的匹配项。
正则表达式中g标志的作用
g标志表示全局搜索,如果定义正则表达式时没有g修饰,则只返回首个匹配的结果。否则返回所有匹配结果。
示例
以上,可以看出match
和matchAll
、加g标志和不加g标志,这两组似乎有异曲同工之妙,那它们的区别又是怎样的呢?
1.对于match
来说,如果正则表达式中有g修饰,结果返回所有与正则表达式匹配的字符串的列表。捕获项会被忽略!
2.对于match
来说,如果正则表达式中没有g修饰,结果除了返回第一个匹配外,还会列出其所有捕获项!
3.对于matchAll
来说,如果正则表达式有g修饰,其返回的迭代项是一个个的数组,数组中除了包含匹配的完整字符串和所有捕获项外,还包含有index
、input
、groups
这三个属性,index
表示当前匹配项在原字符串中的索引位置,input
表示输入的原始字符串,groups
是一个包含所以分组的对象。
4.对于matchAll
来说,如果正则表达式没有g修饰,其结果信息与第3点中描述的完全一致。但其迭代项只有一项,即首个匹配项。