正则表达式
约 1017 字大约 3 分钟...
正则表达式,又称规则表达式,是使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。
正则入门:正则 30 分钟入门,LEARN REGEX 中文版
实用表达式
{}
限定符 (表示固定位数)。比如:\\d{5}
匹配长度有 5 个的数字,\\d{1,5}
最少匹配 1 个,最长匹配 5 个数字。
.{30,}
指匹配长度 30 以上的任意字符串。
[aeiou]
匹配中括号中任意字符。[^aeiou]
匹配除了 aeiou 这几个字母以外的任意字符。
HTTP 链接匹配:https?://[^\s"。?,,?)#]+
,句尾不含空格、中英文逗号、中文句号、问号,仅包含 http 和 https 链接
万能链接匹配:[a-zA-Z]+://[^\s"。?,,?)#]+
匹配万能前缀,如 ftp、tencent、lark。
匹配行:
//匹配含某个字符的行
var ZZMactch = ".*" + inputMatch.value + ".*";
//匹配不含指定字符的行
var ZZMactch = "^((?!"+inputMatch.value+").)*$";
//匹配所有不包括 CSDN 的行
^((?!CSDN).)*$
匹配不同文本组,id=
或 contentId=
后的多个数字符号
(?<=id=)\d*
(?<=[?&](id|contentId)=)\d+
^((?!abc).)*admin((?!abc).)*$
匹配 不包含 abc 但包含 admin 的字符串,匹配整行。[1]
((?!social.tmall.com)(?!ugc/detail.html).)*$
匹配不包含 social.tmall.com
和 ugc/detail.html
的字符串,匹配整行。[2]
[₳$¢₴€₤¥$《]([a-zA-Z0-9]{11})[₳$¢₴€₤¥$《]
匹配淘口令,[]
指中内容任意匹配一项皆可。
前后匹配
前后匹配,前后元素只能出现一次,否则容易覆盖过多。
//匹配任意以 a 开头并以 b 结尾的字符,匹配内容不含 a、b
//如果 a 有 n 个,则同一行也会匹配 n 次
(?<=a).+(?=b)
//如果 b 有 n 个,则匹配最后一个 b;
//如果需要匹配第一个 b,则匹配区加懒惰限定符?,代表重复 1 次或更多次,但尽可能少重复
(?<=.*a).+?(?=b)
//匹配任意以 a 开头并以 b 结尾的字符,匹配内容包含 a、b
a(?<=a).+(?=b)b
//匹配字符串中 a 和词组 abc 间的字符,如果 abc 不存在则去尾部
(?<=.*a).+(?=abc)
正则替换
正则全局替换不能带 \\
,此时用分割替换更方便。
var str = "dogdogdog";
var str2 = str.replace(/dog/g,"cat"); #全局替换
var str2 = str.split("dog").join("cat"); #分割替换
表达式修饰符
元字符:区分大小写
常用正则代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
* | 匹配 0 个或多个.(有多少匹配多少,贪婪模式) |
? | 匹配 0 个或 1 个 (至少匹配一个) |
$ | 以什么结尾的,如\\d+0$ (以 0 结尾) |
^ | 以什么开头的,如^http 匹配以 http 开头的字符串 |
\w | 匹配字母或数字或下划线或汉字 |
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\d | 匹配数字 |
\D | 匹配任意非数字的字符 |
\s | 匹配任意的空白符(空格 ,制表符 ) |
\S | 匹配任意不是空白符的字符 |
\r | 回车符 |
\n | 换行符 (一般情况下使用\r\n 匹配回车换行) |
\t | 制表符,Tab |
\u4e00-\u9fa5 | 非中文 |
常用分组语法
分类 | 代码/语法 | 说明 |
---|---|---|
捕获 | (exp) | 匹配 exp,并捕获文本到自动命名的组里 |
(?<name>exp) | 匹配 exp,并捕获文本到名称为 name 的组里,也可以写成 (?'name'exp) | |
(?:exp) | 匹配 exp,不捕获匹配的文本,也不给此分组分配组号 | |
零宽断言 | (?=exp) | 匹配 exp 前面的位置 |
(?<=exp) | 匹配 exp 后面的位置 | |
(?!exp) | 匹配后面跟的不是 exp 的位置 | |
(?<!exp) | 匹配前面不是 exp 的位置 | |
注释 | (?#comment) | 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |