正则表达式相关知识点
转义字符
如果想要匹配特殊字符的话,就得使用元字符 \
, 它是转义字符字符,让其后续的字符失去其本来的含义。
匹配多个字符的简便正则表达式
循环与重复
- {x}: x次 - {min, max}: 介于min次到max次之间 - {min, }: 至少min次 - {0, max}: 至多max次
字符串边界
回溯引用
所谓 回溯引用(backreference) 指的是模式的后面部分引用前面已经匹配到的子字符串。
回溯引用的语法 \1,\2,....,
:
\1
:表示引用的第一个子表达式\2
:表示引用的第二个子表达式- …
\0
:则表示整个表达式
例子:假设现在要在下面这个文本里匹配两个连续相同的单词?
I am am kaimo not not kaimo313
用 $1,$2...
来引用要被替换的字符串。
"I am am kaimo not not kaimo313".replace(/\b(\w+)\s\1/g, 'xxx'); "I am am kaimo not not kaimo313".replace(/\b(\w+)\s\1/g, '$1');
不想子表达式被引用,可以使用非捕获正则 (?:regex)
这样就可以避免浪费内存。
"kaimo313".replace(/(kaimo)(?:313)/, '$1,$2')
(负)前向查找
前向查找:凡是以 (?=regex)
包含的子表达式在匹配过程中都会用来限制前面的表达式的匹配。
负前向查找:语法 (?!regex)
"kaimo kaimo313".replace(/kaimo(?=313)/, 'xxx'); // 负前向查找 "kaimo kaimo313".replace(/kaimo(?!313)/, 'xxx');
(负)后向查找
后向查找:后向查找(lookbehind)是通过指定一个子表达式,然后从符合这个子表达式的位置出发开始查找符合规则的字串。语法:(?<=regex)
负后向查找:语法:(?<!regex)
可以将字符串进行翻转,然后再使用前向查找,作完处理后再翻转回来。
"kaimo kaimo313kaimo kaimo".replace(/(?<=313)kaimo/, 'xxx'); "kaimo kaimo313kaimo kaimo".replace(/(?<!313)kaimo/, 'xxx'); "kaimo kaimo313kaimo kaimo".replace(/(?<!313)kaimo/g, 'xxx');
推荐 vscode 插件:any-rule
安装
vscode 应用商店中搜索 any-rule
,安装即可。
使用
方式1:
右键选择 🦕正则大全
方式2:
在代码任意位置输入**@zz**
。
图解正则
每次在 any-rule 中选择正则后会弹出提示, 可点击图解正则
点击后可以看到正则解析:https://regexper.com/
也可以使用正则表达式可视化工具:https://jex.im/regulex/#!flags=&re= 查看正则图解
any-rule 正则大全测试
我们可以打开:https://any86.github.io/any-rule/,我们可以查找到我们需要正则关键字,然后输入去验证。
any-rule 正则大全(已收录 83)
下面的正则大全来自:https://github.com/any86/any-rule
火车车次
/^[GCDZTSPKXLY1-9]\d{1,4}$/
手机机身码(IMEI)
/^\d{15,17}$/
必须带端口号的网址(或ip)
/^((ht|f)tps?:\/\/)?[\w-]+(\.[\w-]+)+:\d{1,5}\/?$/
网址(URL)
/^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?/
统一社会信用代码
/^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/
统一社会信用代码(宽松匹配)(15位/18位/20位数字/字母)
/^(([0-9A-Za-z]{15})|([0-9A-Za-z]{18})|([0-9A-Za-z]{20}))$/
迅雷链接
/^thunderx?:\/\/[a-zA-Z\d]+=$/
ed2k链接(宽松匹配)
/^ed2k:\/\/\|file\|.+\|\/$/
磁力链接(宽松匹配)
/^magnet:\?xt=urn:btih:[0-9a-fA-F]{40,}.*$/
子网掩码(不包含 0.0.0.0)
/^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)$/
linux"隐藏文件"路径
/^\/(?:[^/]+\/)*\.[^/]*/
linux文件夹路径
/^\/(?:[^/]+\/)*$/
linux文件路径
/^\/(?:[^/]+\/)*[^/]+$/
window文件夹路径
/^[a-zA-Z]:\\(?:\w+\\?)*$/
window下文件路径
/^[a-zA-Z]:\\(?:\w+\\)*\w+\.\w+$/
股票代码(A股)
/^(s[hz]|S[HZ])(000[\d]{3}|002[\d]{3}|300[\d]{3}|600[\d]{3}|60[\d]{4})$/