正则积累

1 正则贪婪模式

属于贪婪模式的量词,也叫做匹配优先量词,包括: 

“{m,n}”、“{m,}”、“?”、“*”和“+”。 

非贪婪

“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。 

2 notepad++ 匹配单个汉字  https://zhuanlan.zhihu.com/p/33335629

  [\x{4e00}-\x{9fa5}]

  [^\x{4e00}-\x{9fa5}]  //除汉字之外的

 

  1. `/[\u4e00-\u9fa5]/`是错的,不要用二十年前的正则表达式了
  2. `/\p{Unified_Ideograph}/u`是正确的,不需要维护,匹配所有汉字。这里`\p`是 Unicode 属性转义正则表达式。
  3. `/\p{Ideographic}/u` 和 `/\p{Script=Han}/u` 匹配了除了汉字以外的其他一些字符,在「汉字匹配正则表达式」这个需求下,是错的。
  4. 目前 Chrome 和 Safari 支持 Unicode 属性转义正则表达式。对其他环境,使用 7.7 版本的 `@babel/env` 就可以自动根据浏览器规定打开支持。

 

 

 

正则表达式排除某字符串的行

 

^(?!.*trigger\(".+"\)).*$
^(?!.*select).+$  //匹配不含select的行

 

^(?!.*helloworld).*$  //匹配不含helloword的行

 

^((?!delete).)*$   查找不以delete 开始的行

 

3  分组   详见https://www.cnblogs.com/wancheng7/p/8906015.html

 

  • 捕获型 ()
  • 非捕获型 (?:)
  • 正向前瞻型 (?=)
  • 反向前瞻型 (?!)

 

 ?=,?:,?! 

a(?=b) 查找b前面的a


(?<=a)b 查找a后面的b

a(?!exp2) 查找后面不是b的a

(?<!a)b查找前面不是a的b

 

'adsaaa'.replace(/a(?=d)/g,'c')   // "cdsaaa"  非获取性匹配,只将后面有d的a替换成c

'adsaaa'.replace(/a(?:d)/g,'c')   // "csaaa"  此时等同于/ad/,将ad替换成c
'adsaaa'.replace(/a(?!d)/g,'c')   // "adsccc" 将后面不是d的a替换成c
'adsaaa'.match(/a(?=d)/g)   // ["a"]
'adsaaa'.match(/a(?:d)/g)   // ["ad"]
'adsaaa'.match(/a(?!d)/g)   // ["a", "a", "a"]

  

其中?:的用处主要是在有|的时候,很好用,例如a(?:d|r)匹配的就是ad或者ar

(?<=pattern),?<!pattern)这两个js里现在都用不了

 

 

 

参考:

https://www.cnblogs.com/520yang/articles/7473596.html

https://blog.csdn.net/xuyangxinlei/article/details/81359366

https://blog.csdn.net/csm0912/article/details/81206848

 4 https://www.cnblogs.com/molinglan/p/8746510.html

 

posted @ 2019-08-14 17:03  wolbo  阅读(314)  评论(0编辑  收藏  举报