1 正则贪婪模式
属于贪婪模式的量词,也叫做匹配优先量词,包括:
“{m,n}”、“{m,}”、“?”、“*”和“+”。
非贪婪
“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。
2 notepad++ 匹配单个汉字 https://zhuanlan.zhihu.com/p/33335629
[x{4e00}-x{9fa5}]
[^x{4e00}-x{9fa5}] //除汉字之外的
- `/[u4e00-u9fa5]/`是错的,不要用二十年前的正则表达式了
- `/p{Unified_Ideograph}/u`是正确的,不需要维护,匹配所有汉字。这里`p`是 Unicode 属性转义正则表达式。
- `/p{Ideographic}/u` 和 `/p{Script=Han}/u` 匹配了除了汉字以外的其他一些字符,在「汉字匹配正则表达式」这个需求下,是错的。
- 目前 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里现在都用不了
参考:
1 https://www.cnblogs.com/520yang/articles/7473596.html
2 https://blog.csdn.net/xuyangxinlei/article/details/81359366