正则基础
推荐的在线学习、编写、测试集成工具: https://regexr.com/
字符类
[] 匹配
[] 匹配[aeiou] 示例:
'glib jocks vex dwarves!'.match(/[aeiou]/g)
// =>
// ["i", "o", "e", "a", "e"]匹配结果: glib jocks vex dwarves!
^ 非
^ 非[^aeiou] 示例:
'glib jocks vex dwarves!'.match(/[^aeiou]/g)
// =>
// ["g", "l", "b", " ", "j", "c", "k", "s", " ", "v", "x", " ", "d", "w", "r", "v", "s", "!"]匹配结果正好与上一个示例中的互补
- 范围
- 范围示例: [a-z] 表示从 a 到 z 范围内的所有小写字母
. 任意字符
. 任意字符注意,. 表示所有字符(字母、数字、符号),除了:换行
\w 词语(word缩写)
\w 词语(word缩写)等同于: [A-Za-z0-9_]
\W 非词语
\W 非词语等同于: [^A-Za-z0-9_]
\d 数字
\d 数字等同于: [0-9]
\D 非数字
\D 非数字等同于: [^0-9]
\s 空白符
\s 空白符包括:空格、制表符(Tab)、换行
\S 非空白符
\S 非空白符与空白符互补
锚点
^ 起始
^ 起始示例: /^\d/ 表示以数字开头
$ 结束
$ 结束示例: /\d$/ 表示以数字结尾
\b 单词边界
\b 单词边界示例:
'she sells seashells'.match(/e\b/g)
// =>
// ["e"]
// 来自于 sh[e空格]sells\B 非单词边界
\B 非单词边界与 \b 互补
转义字符
\ 保留字
\ 保留字示例: \\ 以字符串匹配 \
\t Tab
\t Tab\n 换行
\n 换行其他
非常见的转译字符:
\v垂直Tab\f\r回车\0Null\cI\000八进制\xFF十六进制\uFFFFUnicode\u{FFFF}扩展Unicode
组合
() 捕获分组
() 捕获分组示例: /(ha)+/ 匹配重复的 ha
\1 数组引用
\1 数组引用示例: /(\w)a\1/ 匹配以a为中间字母的三字叠字词如 dad, hah
(?:) 非捕获分组
(?:) 非捕获分组依然以分组进行匹配,但不会创建捕获分组。
观望
(?=) 向后匹配
(?=) 向后匹配示例:
'1pt 2px 3em 4px'.match(/\d(?=px)/g)
// =>
// ["2", "4"]
// 单位为 px 的两个结果(?!) 向后反匹配
(?!) 向后反匹配示例:
'1pt 2px 3em 4px'.match(/\d(?!px)/g)
// =>
// ["1", "3"]
// 单位不为 px 的两个结果数量及替换
+ 至少出现一次
+ 至少出现一次示例: \d+
* 出现0次或多次
* 出现0次或多次{n,m} 出现n到m次
{n,m} 出现n到m次示例:
\d{3}指定 3 位数字\d{1,3}可以是 1 - 3 位数字\d{3,}可以是 3位或更多位数字
? 至多出现一次(0 或 1)
? 至多出现一次(0 或 1)示例: /colou?r/ 匹配 color 和 colour
? 懒匹配
? 懒匹配正常情况下,数量匹配是贪婪匹配,尽可能匹配更多。
示例: /b\w+?/ 表示尽可能少的匹配,如beers匹配结果为be。
| 或
| 或示例: b(a|e|i)d
子语句
$&匹配$1捕获分组$`前匹配$'后匹配$$转义$符号\n转义字符
标识
i忽略大小写g全局搜索m多行uUnicodey从上次位置继续并忽略g全局搜索
Last updated
Was this helpful?