正则表达式学习记录

符号说明

不方便书写的符号使用转义符 "\" 来取消特殊语义例如^表示字符串的开始\^则表示匹配^这个符号。

通常大写表示反义词例如\d表示匹配数字,\D表示匹配非数字

常用匹配字符

符号 说明
. 匹配除换行外的所有字符
\w 匹配所有字母数字,等同于 [a-zA-Z0-9_]
\d 匹配数字: [0-9]
\s 匹配所有空格字符,等同于: [\t\n\f\r\p{Z}]
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符
\v 匹配一个垂直制表符
\p 匹配 CR/LF(等同于 \r\n),用来匹配 DOS 行终止符

字符,数字,空格字符有反义匹配即\W,\D,\S

限定符,量词

符号 说明
* 出现0次或多次
+ 出现1次或多次
? 出现0次或1次
{n} 出现n次
{n,m} 出现n次至m次,可不写n或m表示至少n次或至多m次

贪婪匹配

默认为贪恋匹配,即默认尽可能多的匹配

"/(.*at)/" => The fat cat sat on the mat.

惰性匹配

在量词后加上?可将匹配模式修改为惰性匹配,尽可能少的匹配

"/(.*?at)/" => The fat cat sat on the mat.

定位符

定位符仅匹配位置并不匹配指定字符

符号 说明
^ 开始位置
$ 结束位置
\b 匹配单词的开始或结束
\B 匹配非单词的开始或结束

范围

符号 说明
| 匹配左侧或者右侧, x|y 表示匹配x或者y,左右可以是分组
[] 括号内为匹配范围,[avd],表示avd三个字母都可匹配
[a-z] 表示匹配连续的范围a到z
[^a-z] 表示匹配a到z之外的任意字符

分组

符号 说明
() 括号内为子表达式,子表达式可被引用
\n n为1-9之间的数字,在正则表达式中来引用表达式中的分组,例如(a)\1,等价于aa

分组之后的表达式可在文本编辑器中使用$n来引用

其他

正则表达式修饰符

不同语言对正则表达式有不同的修饰符例如忽略大小写,多行匹配等,js是在/表达式/修饰符 中配置。具体需要看使用语言中的实现。 js中正则表达式的标记,可组合使用,在正则表达式最后加上符号

符号 说明
g 全局匹配
i 不区分大小写
m 多行搜索
s 允许.匹配换行符
  • 默认正则会返回第一个匹配的结果,加上全局匹配后会返回所有匹配的结果

"/.(at)/" => The fat cat sat on the mat.

"/.(at)/g" => The fat cat sat on the mat.

特殊字符匹配

符号 说明
\xXX 编号在 0 ~ 255 范围的字符,比如:点击测试 空格可以使用 "\x20" 表示
\uXXXX 任何字符可以使用 "\u" 再加上其编号的4位十六进制数表示,比如:点击测试 "\u4E2D"

匹配规则,环视

符号 说明
(?:pattern) 捕获但不单独获取结果
(?=pattern) 肯定查询,仅当匹配字符串符合后缀匹配内容才判定为匹配,例如Windows(?=95|98|NT|2000)
(?<=pattern) 效果同上但放在字符串前,匹配前缀,例如 (?<=95|98|NT|2000)Windows
(?!pattern) 否定查询,仅当匹配字符串不符合匹配后缀才判定为匹配
(?<!pattern) 效果同上但放在字符串之前,匹配前缀,例如 (?<!95|98|NT|2000)Windows

资料

  1. 将正则表达式图形化,方便理解

https://regexper.com/

https://jex.im/regulex/

2.在线测试正则

https://regex101.com/r/AyAdgJ/1

https://regexr.com/

  1. 参考资料

https://blog.csdn.net/hello_word2/article/details/84890548

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

https://www.runoob.com/regexp/regexp-tutorial.html

http://www.regexlab.com/zh/regref.htm

https://xie.infoq.cn/article/dcc7103126233028945c67c43

https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md

上一篇:o(︶︿︶)o 唉,总是没有十全十美的


下一篇:如何离线在itpub上发表博文