js 正则表达式进阶详解

妖狐艹你老母 2023-02-10 07:45 164阅读 0赞

1:贪婪匹配和非贪婪匹配

  1. 正则表达式中量词有
  2. *(0次或者多次)
  3. ?(0次或者1次)
  4. +(1次或者多次)
  5. { m, n}(大于等于m小于等于n次)
  6. { n}(n次)
  7. 这些量词会尽可能多的匹配,比如:
  8. 'abababa ababc abe'.match(/(ab)+/g),匹配结果是['ababab', 'abab', 'ab'],统称贪婪匹配
  9. 当这些量词后面再跟一个?,就变成了非贪婪匹配,会尽可能少的匹配,比如
  10. 'abababa ababc abe'.match(/(ab)+?/g),用的匹配结果是 ["ab", "ab", "ab", "ab", "ab", "ab"]

2:捕获分组和非捕获分组
正则表达式中的小括号表示分组,分组的内容可以通过一下方式获取

  • 字符串的replace方法,$n表示匹配到的第n个分组
    ‘2011-05-20 2012-05-20 2013-05-20’.replace(/(d{4})-(\d{2})-(\d{2})/g, ‘$3-$2-$1’)
    返回值为”20-05-2011 20-05-2012 20-05-2013”
    ‘2011-05-20 2012-05-20 2013-05-20’.replace(/(\d{4})-(\d{2})-(\d{2})/g, (…args) => {console.log(args)})
    在这里插入图片描述
  • 反向引用
    /(\d{3})\1\1/’.test(‘12312313’)
  • 非捕获分组:小括号中匹配到的内容不会放到匹配结果的分组中/(?:ab)+/g,这个正则表达式匹配的内容没有分组

3:正向肯定查找和正向否定查找

  1. ?= 正向肯定查找,x(?=y)匹配x当且仅当x后面紧跟着y
  2. ?! 正向否定查找,x(?!y)匹配x当且仅当x后面不紧跟着y

发表评论

表情:
评论列表 (有 0 条评论,164人围观)

还没有评论,来说两句吧...

相关阅读