作用:检查当前位置后面的字符是否匹配 pattern,但不消耗字符。
示例:
- 正则:
\d+(?=元)
- 匹配:字符串
100元 中的 100(仅当数字后接 元 时匹配)。
作用:检查当前位置后面的字符是否不匹配 pattern。
示例:
- 正则:
\d+(?!元)
- 匹配:字符串
100美元 中的 100(数字后不接 元 时匹配)。
作用:检查当前位置前面的字符是否匹配 pattern。
示例:
- 正则:
(?<=¥)\d+
- 匹配:字符串
¥100 中的 100(仅当数字前接 ¥ 时匹配)。
作用:检查当前位置前面的字符是否不匹配 pattern。
示例:
- 正则:
(?<!¥)\d+
- 匹配:字符串
$100 中的 100(数字前不接 ¥ 时匹配)。
| 类型 |
方向 |
匹配条件 |
示例(匹配 apple 中的 p) |
| 正向先行断言 |
向后 |
后续字符符合 |
p(?=l)(第二个 p,后接 l) |
| 负向先行断言 |
向后 |
后续字符不符合 |
p(?!l)(第一个 p,后不接 l) |
| 正向后行断言 |
向前 |
前导字符符合 |
(?<=a)p(第一个 p,前接 a) |
| 负向后行断言 |
向前 |
前导字符不符合 |
(?<!a)p(第二个 p,前不接 a) |
- 敏感词过滤:
(?i)apple(?= juice) 匹配 Apple juice 但不匹配 Apple pie。
- 数字格式化:
(?<=\d)(?=(\d{3})+$) 在千位分隔符前插入逗号。
- URL 提取:
(?<!href=")https?://\S+ 匹配独立 URL 而非链接中的 URL。
注意:后行断言在部分正则引擎(如 JavaScript 旧版本)中不支持,使用时需注意兼容性。
| 字符 |
含义 |
示例 |
. |
匹配除换行符外的任意字符 |
a.c 匹配 abc、a1c |
^ |
匹配字符串开头 |
^hello 匹配以 hello 开头的字符串 |
$ |
匹配字符串结尾 |
world$ 匹配以 world 结尾的字符串 |
* |
匹配前面的字符 0 次或多次 |
ab* 匹配 a、ab、abb |
+ |
匹配前面的字符 1 次或多次 |
ab+ 匹配 ab、abb,但不匹配 a |
? |
匹配前面的字符 0 次或 1 次 |
ab? 匹配 a、ab |
{n} |
匹配前面的字符恰好 n 次 |
a{3} 匹配 aaa |
{n,} |
匹配前面的字符至少 n 次 |
a{2,} 匹配 aa、aaa |
{n,m} |
匹配前面的字符 n 到 m 次 |
a{2,3} 匹配 aa、aaa |
| 语法 |
含义 |
示例 |
[ ] |
匹配方括号内的任意一个字符 |
[abc] 匹配 a、b 或 c |
[^ ] |
匹配不在方括号内的任意字符 |
[^abc] 匹配除 a、b、c 外的字符 |
- |
在方括号内表示范围 |
[a-z] 匹配任意小写字母,[0-9] 匹配任意数字 |
| |
或运算符 |
a|b 匹配 a 或 b |
| 简写 |
等价于 |
含义 |
\d |
[0-9] |
匹配数字 |
\D |
[^0-9] |
匹配非数字 |
\w |
[a-zA-Z0-9_] |
匹配字母、数字、下划线 |
\W |
[^a-zA-Z0-9_] |
匹配非字母、数字、下划线 |
\s |
[ \t\n\r\f\v] |
匹配空白字符(空格、制表符、换行符等) |
\S |
[^ \t\n\r\f\v] |
匹配非空白字符 |
| 字符 |
含义 |
|
\ |
转义特殊字符,使其失去元字符含义 |
\. 匹配点号 .,\* 匹配星号 * |
\b |
匹配单词边界(单词与非单词字符的交界处) |
\bcat\b 匹配独立的 cat,但不匹配 category |
\B |
匹配非单词边界 |
\Bcat\B 匹配 category 中的 cat,但不匹配独立的 cat |
\n |
匹配换行符 |
|
\t |
匹配制表符 |
|
| 语法 |
含义 |
示例 |
(?=pattern) |
正向先行断言:匹配后面是 pattern 的位置 |
\d+(?=元) 匹配 100元 中的 100 |
(?!pattern) |
负向先行断言:匹配后面不是 pattern 的位置 |
\d+(?!元) 匹配 100美元 中的 100 |
(?<=pattern) |
正向后行断言:匹配前面是 pattern 的位置 |
(?<=¥)\d+ 匹配 ¥100 中的 100 |
(?<!pattern) |
负向后行断言:匹配前面不是 pattern 的位置 |
(?<!¥)\d+ 匹配 $100 中的 100 |
| 语法 |
含义 |
示例 |
( ) |
捕获分组:将括号内的内容作为一个整体,并记住匹配的内容 |
(ab)+ 匹配 ab、abab |
(?: ) |
非捕获分组:只分组,不记住匹配的内容 |
(?:ab)+ 匹配 ab、abab(性能略高) |
\1、\2 |
反向引用:引用前面捕获分组的内容 |
(\w)\1 匹配两个连续相同的字母,如 ee |
| 字符 |
含义 |
示例 |
*、+、?、{n,} |
贪婪匹配:尽可能多的匹配 |
a.*b 匹配 acb 中的 acb |
*?、+?、??、{n,}? |
非贪婪匹配:尽可能少的匹配 |
a.*?b 匹配 acb 中的 a 和 b 之间的最短内容 c |
| 字符 |
含义 |
|
\A |
匹配字符串开始(等价于 ^,但不受多行模式影响) |
|
\Z |
匹配字符串结束(等价于 $,但不受多行模式影响) |
|
\z |
严格匹配字符串结束(不考虑换行符) |
|
(?i) |
忽略大小写修饰符 |
(?i)hello 匹配 Hello、HELLO 等 |
(?m) |
多行模式:^ 和 $ 匹配每行的开始和结束 |
|
(?s) |
单行模式:. 匹配包括换行符在内的所有字符 |
|
- 匹配邮箱:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
- 匹配 URL:
https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+
- 匹配 HTML 标签:
<[^>]+>
([\S\s](?!masonry-brick)){1,}
#不包含