JavaScript 正则表达式的构成方式
字面量
/pattern/flags
pattern
是表达式文本flags
是特殊参数:g
——全局匹配;i
——忽略大小写;m
——让开头(^)和结尾($)字符工作在多行模式(由 \n 或 \r 分割的)多行模式:每一行的开头结尾也可匹配。关闭多行模式则只匹配整个字符串的开头和结尾
静态常量:构造完成后保持不变
- 构造函数:new RegExp("pattern","flags")
pattern是字符串,注意对 \ 的转义(” \\ “)
运行时编译→表达式可变
表达式文本由普通字符、特殊字符以及对应的重复规则组合而成。
例子:/abc/
匹配字符串中的’abc’子串
特殊字符
★ 特殊字符都是单个字符!
字符类别
.
英文句点,小数点——匹配任意单个字符(换行符除外)\d
一个数字[0-9]
;\D
一个非数字[^0-9]
\w
一个字母或数字或下划线[a-zA-Z0-9_]
;\W
一个非字母非数字非下划线的字符[^a-zA-Z0-9_]
\s
一个空白符;\S
一个非空白符\xhh
一个编码为两位十六进制数(hh)的字符(ASCII码)\uhhhh
一个Unicode字符,四位十六进制数- 其他:RexExp-MDN
字符集合
[abcde]
匹配集合中的任意一个字符。abcde 等价于 a-e[^abcde]
匹配任意一个不在集合中的字符。abcde 等价于 a-e
边界
^
开头(字符串或每行)$
结尾(字符串或每行)\b
单词边界\B
非单词边界(内部)
分组
捕获括号
(pattern)
:匹配表达式并保存括号内的字符串。replace()函数的第二个参数中使用
$1
,$2
,…$9
获取反向引用
\n
(n是正整数):指向正则表达式中左起第 n 个括号所匹配的字符串非捕获括号
(?:pattern)
:匹配但不保存
//不大理解。放上另一个说法:分组用于指定子表达式,单独确定重复次数或其他操作。参考
数量词(表达式或分组的重复次数)
位于表达式后面
*
:0或多次+
:1或多次?
:0或1次{n,}
:至少 n 次{n,m}
:至少 n 次,至多 m 次
默认匹配模式是贪婪模式,即一个匹配结果包含尽可能多的字符。在上述数量词后加上一个 ? 就设置成非贪婪模式,即一个匹配结果包含尽可能少的字符。
★ 另有一条更高优先级的匹配规则:最先开始的匹配拥有最高优先权
{n}
:n次(多于 n 时也只匹配n次,无所谓贪婪懒惰)x(?=y)
:只有当 x 后面紧跟着 y 时,才匹配 x 。x(?!y)
:只有当 x 后面不紧跟着 y 时,才匹配 x 。x|y
:匹配 x 或 y 。