正则表达式

约 1027 字大约 3 分钟...

正则表达式,又称规则表达式,是使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。

正则入门:正则 30 分钟入门open in new windowLEARN REGEX 中文版open in new window

实用表达式

{} 限定符 (表示固定位数)。比如:\\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.comugc/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)这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

  1. 正则表达式匹配:包含且不包含open in new window ↩︎

  2. 正则表达式匹配不包含某些字符串的技巧open in new window ↩︎

已到达文章底部,欢迎留言、表情互动~
  • 赞一个
    0
    赞一个
  • 支持下
    0
    支持下
  • 有点酷
    0
    有点酷
  • 啥玩意
    0
    啥玩意
  • 看不懂
    0
    看不懂
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.14.8