我们都知道,可以用 / / 来声明一个正则表达式的字面量,在后面还可以上一个正则表达式的标识
- 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, }