我们都知道,可以用 / /
来声明一个正则表达式的字面量,在后面还可以上一个正则表达式的标识
- g 全局的,匹配多次,但是不同的方法对 g 标识的处理不同
- i 忽略大小写
- m 多行
正则表达式的分组有 4 种
- 捕获型
()
- 在()
中匹配的字符都会被保存下来,可以用\1
\2
来引用获取 - 非捕获型
(?: )
- 可以用非捕获的分组来进行几个正则表达式因子的组合 - 向前正向匹配
(?= )
- 不建议使用 - 向前负向匹配
(?! )
- 不建议使用
正则表达式因子,可以是一个字符,一个由 ()
包围的组,一个字符类,或者是一个转义序列
在表达式因子中(一般就是在 ()
中),如果遇到下列字符的时候,会被当成运算符,而不会被当成字面量,如果想让你的字符表示字面量,则需要用 \
进行转义
字符 | 运算符作用 | 转义 |
---|---|---|
\ | 当成转义字符使用 | \\ |
/ | 误以为正则的结束 | / |
[ or ] | 包括一个字符类 | \ [ or \ ] |
( or ) | 包括一个分组 | \ ( or \ ) |
{ or } | 正则的量词 | \ { or \ } |
? | 正则的量词 | ? |
+ | 正则的量词 | \+ |
* | 正则的量词 | \* |
| | 当成正则的一个分支 | \| |
. | 当成任意字符 | \. |
^ | 会匹配文本的开始 | ^ |
$ | 会匹配文本的结束 | $ |
我们可以用 []
来包括我们的字符类,在字符类中也会遇到字符转义的问题
字符 | 运算符作用 | 转义 |
---|---|---|
\ | 当成转义字符使用 | \\ |
/ | 误以为正则的结束 | / |
[ or ] | 包括一个字符类 | \ [ or \ ] |
- | 当成表示范围的字符 | \- |
^ | 当成非操作 | ^ |
我们用 |
来创建我们的正则分支,如 /in|int/
当 into
与该正则匹配的时候,就只会匹配到 in
而不会匹配 int
因为 in
已经成功匹配了
除了我们自己可以对字符的转义之外,JavaScript 还提供了一些给我们使用
\d
- 相当于[0-9]
\D
- 相当于[^0-9]
\s
- 相当于空白\w
- 相当于[0-9A-Za-z]
正则的量词比较简单
{num, }
- 匹配 num 次或多次{num1, num2}
- 匹配 num1 次到 num2 次?
- 相当于{0, 1}
*
- 相当于{0, }
+
- 相当于{1, }