数量限定符 | 解释 |
---|---|
x+ | 1 或多个 |
x* | 0 或多个 |
x? | 0 或 1 个 |
x{n} | n 个 |
x{n,} | 至少 n 个 |
x{n, m} | n 至 m 个, 遵循贪婪原则, 会尽可能匹配多个; 如果在后面加个 ? (如 x{n, m}?), 遵循非贪婪原则 |
贪婪可以理解成从后往前遍历, 非贪婪可以理解为从前向后遍历
字符限定符 | 解释 |
---|---|
\d | 匹配一个数字字符, [0-9] |
\D | 匹配一个非数字字符, 0-9 |
\w | 匹配单词字符(包括数字下划线在内), [0-9A-Za-z_] |
\W | 匹配非单词字符(包括数字下划线在内), 0-9A-Za-z_ |
\s | 匹配空白字符(空格、回车、制表符) |
\S | 匹配非空白字符 |
. | 匹配除换行符(\n)以外 的任何单个字符 |
根据使用方法可以进行如下分类:
使用 | 解释 |
---|---|
[0-9a-zA-Z] | 范围字符 |
[abcd] | 任意字符 |
[^a-z] | 范围字符 |
定位符 | 解释 |
---|---|
^ | 开头标识 |
$ | 结尾标识 |
\b | 单词边界 |
\B | 非单词边界 |
\
: 用于匹配某些特殊字符
/^(\d)\1+$/.test(333), 比如这里的 \1 表示第一个括号里的值, 达到判断重复数字的效果
|
: 可以匹配多个规则
特殊用法 | 解释 |
---|---|
?= 正向预查 | 匹配以指定内容结束的字符串 |
?! 负向预查 | 匹配不是以指定内容结束的字符串 |
? | 不把选择匹配符的内容放到缓冲区 |
在 JavaScript 下使用正则表达式, 有两种方法:
第一种方法: 使用 RegExp
类
提供的方法有: (正则表达式在前面)
test(str)
: 在字符串匹配是否有匹配模式的字符串, 返回 true/false
exec
: 如果正则表达式中有子表达式, 使用 exec
方法, 返回 result[0] = 匹配结果, result[1] = 子表达式 1 的匹配结果 ……
第二种方法是: 使用 String
类
提供的方法有: (正则表达式在后面)
search
返回匹配模式的字符串出现的位置, 如果没有, 返回 -1;match
返回匹配模式匹配到的字符串, 如果有, 返回数组, 无, 返回 null;replace
将匹配模式匹配到的字符串进行替换;split
将字符串已匹配模式为分隔符进行字符串分隔, 返回数组;('&ab=').match(/([^&]+)=/g) // ["ab="]
分析: ^ 一般表示开头, 但是注意此处中括号里的 ^
表示非
?<=: now support match from right to left.
以下脚本可以在 JavaScript/bash 中,均可运行。
目的为搜索 order_id(区分大小写) 或订单编号。
[oO]{1}[rR]{1}[dD]{1}[eE]{1}[rR]{1}_[iI]{1}[dD]{1}|订单编号
<Comp[^<]+style=
正则 lastIndex 位数的问题,不同规范版本对边界定义的差异蛮多,在循环中使用正则就非常容易踩坑。
关联文章:
watch-out-for-zero-length-matches:此文中介绍了不同规范中,对 lastIndex 规范边界的差异,在循环场景中书写正则表达式要小心踩坑。