正则表达式的用法

引用

参考资料

语法

普通字符

字符 描述
[aeiou] 匹配[ ]中的所有字符
[^aeiou] 匹配除[ ]中的所有字符
[A-Z] [A-Z]表示一个区间,匹配所有大写字母
\w 匹配字母、数字、下划线,等价于[A-Za-z0-9_]
\d 匹配阿拉伯数字,等价于[0-9]

非打印字符

字符 描述
\cx 由x指明的控制字符。如\cM匹配一个 Control-M 或回车符
\f 换页符,等价于\x0c \cL
\n 换行符,等价于\x0a \cJ
\r 换行符,等价于\x0d \cM
\s 空白符,等价于[\f\n\r\t\v]
\S 非空白符,等价于[^\f\n\r\t\v]
\t 制表符,等价于\x09 \cI
\v 垂直制表符,等价于\x0b \cK

特殊字符

字符 描述
( ) 子表达式
(...)* 匹配前面子表达式零次或多次
(...)+ 匹配前面子表达式一次或多次
(...)? 匹配前面子表达式零次或一次
(...)|(...) 匹配|两边的任意一种
. 匹配除换行符外的任一字符,等价于[^\n\r]

定位符

字符 描述
^ 字符串开始的位置
$ 字符串结尾的位置
\b 匹配一个单词的边界
\B 非单词边界匹配
\<n> 匹配第n个捕获组的内容,进行反向引用

限定符

字符 描述
{n,m} 其中n <= m,放在子表达式后,最少匹配n次,最多匹配m次,缺少其中一个数字则表示不设限
{n} 匹配确定的n次

贪婪与非贪婪量词

默认情况下,量词(* + ? {})会尽可能匹配多个字符(贪婪的),量词后加?会使其尽可能少匹配(非贪婪的)。具体可见这里

正向与负向检查

字符 描述
(?=...) 正向肯定检查,匹配后面跟着特定模式的位置
(?!...) 正向否定预查,匹配后面不跟着特定模式的位置
(?<=...) 反向肯定预查,匹配前面是特定模式的位置
(?<!...) 反向否定预查,匹配前面不是特定模式的位置

修饰符

/.../g中的g就是一个修饰符

字符 描述
i 忽略大小写
g 全局匹配
m 改变^$的行为,使其匹配每行的开头和结尾,而不仅是整个字符串的开头和结尾
s 单行模式
u Unicode模式
y 粘性匹配,从目标字符串的当前位置开始匹配(使用lastIndex属性)
x 扩展模式,忽略模式中的空白和注释,使正则表达式更易读

示例

匹配a某c

1
/a.c/g

匹配一个正整数

1
/[1-9][0-9]*/g

匹配一个两位数

1
/[1-9][1-9]?/g

匹配开头为nig的单词

1
/\bnig/g

匹配开头为nig的字符串

1
/^nig/

匹配含有ay但不在结尾的单词

1
/ay\B/g

查找重复的单词

1
/\b([a-z]+) \1\b/igm

匹配后面跟着9598Windows

1
/Windows(?!95|98)/g

匹配一个邮箱

1
/\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b/g

其中

  • [\w.%+-]+ 匹配一个由字母、数字、下划线、.%+-*组成的字符串
  • [a-zA-Z]{2,6}至少由2-6个字符组成的字符串

匹配HTML标记

1
/<[a-zA-Z]+.*?>([\s\S]*?)</[a-zA-Z]*?>/g

匹配多于两个a的字符串

1
/^a{2,}/

贪婪与非贪婪的区别

对于同一个字符串 <h1> 正则表达式的用法 </h1>,一般情况下的匹配

1
/<.*>/s

会匹配整个字符串的内容(整个字符串都符合),但在非贪婪下的匹配

1
/<.*?>/s

或者

1
/<\w+?>/s

只匹配到<h1>


正则表达式的用法
http://example.com/2025/04/29/regex/
作者
Ivan Chen
发布于
2025年4月29日
许可协议
IVAN