1.贪婪模式

正则是:/\d{3,5}/g,字符串是 12345678

那么exec 方法或者match方法返回的结果是什么呢? 是 [123,456] 还是 [1234,5678] 还是[12345]

答案是:[12345] . 正则表达式默认是贪婪模式,即尽可能多的匹配,如果失败那么减一匹配直到最小值。在这种情况下前面5个数字匹配后,下标来到6处,678不会再匹配

2.非贪婪模式

让正则表达式尽可能少的匹配,也就是说一旦成功匹配就不在继续尝试就是非贪婪模式

只要在量词后加上?即可

'123456789'.match(/\d{3,5}?/g); 返回[123,456,789]

3.分组反向引用

2015-12-25 =》 12/25/2015

可以这样。$n表示对应的分组.如果没有这样的分组那么就会把$n 当成字符串处理

'2015-12-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1')

栗子:

'a1b2c3d4'.replace(/((\w\d){3})/g,'X$1xx'),返回结果"Xa1b2c3xxd4"

4.忽略分组(只是利用分组,但确不捕获)

不希望捕获某些分组只要在分组内加上?: 就可以

栗子:

'sasdadsssaaaattt'.replace(/(?:sss|ttt)/g,'X$1X')

返回:
"sasdadX$1XaaaaX$1X"

4.前瞻与后顾

1.正则表达式从文本头部向尾部开始解析,这样的解析方向称为'前'

2.前瞻 就是在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾/后瞻 方向相反

3.Javascript 不支持后顾

4.符合和不符合特定断言称为肯定/正向 匹配 和 否定/负向 匹配

5.语法: exp(?=assert)  正向  exp(?!assert)   负向

栗子:

'a1b3c5'.replace(/\w(?=\d)/g,'X0X'),返回:"X0X1X0X3X0X5"。 数字部分并不会被替换

'a1b3c5'.replace(/\w(?!\d)/g,'X0X'),返回: "aX0XbX0XcX0X"。 数字也是字符

 

相关文章:

  • 2021-10-13
  • 2022-12-23
  • 2022-12-23
  • 2021-09-25
  • 2021-11-29
  • 2021-11-29
  • 2021-11-29
  • 2021-11-18
猜你喜欢
  • 2021-06-24
  • 2021-11-29
  • 2021-09-17
  • 2021-10-13
  • 2021-05-16
  • 2021-11-29
相关资源
相似解决方案