正则表达式知识概览
本文中用n指代具体字符
概述
核心
正则表达式是匹配模式,要么匹配字符,要么匹配位置。
组成
量词、修饰符、元字符、特殊符号和特定语言API。
基础
量词
n+ 大于等于1个字符
n* 大于等于0个字符
n? 包含0个或1个字符
n{x} 包含x个字符
n{x,} 包含x个以上字符
n{x,y} 包含x到y个字符
修饰符
g 全局匹配
i 字母大小写不敏感
m 多行匹配
y 粘连匹配
s 拓展点字符(任意字符)
u 处理超范围Unicode字符
元字符
\d\D 数字/非数字
\w\W 字母/非字母
\s\S 空白/非空白
\b\B 单词/非单词边界
\xxx 查找8进制字符
\udd 查找16进制
\数字 反向引用
特殊符号
() 分组
[] 字符组
| 或
?=n/?!n 先行断言
?<=n/><!n 后行断言
^ 匹配开头
$ 匹配结尾
应用
位置
开头/结尾 => ^、$
单词边界 => \b、\B
断言/环视 => ?=n、?!n、?<=n、?<!n
模糊匹配
(量词)横向模糊匹配 => n{x,y}、n{x,}、n+、n*、n?
(字符组)纵向模糊匹配 => []、\d、\D、\w、\W、\s、\S
分组/分支/引用
分组 => ()
分支 => |
引用 => \数字
js正则API
字符串方法
String.prototype.search // 检索与正则表达式相匹配的值。
String.prototype.match // 找到一个或多个正则表达式的匹配。
String.prototype.replace // 替换与正则表达式匹配的子串。
String.prototype.split // 把字符串分割为字符串数组。
正则方法
RegExp.prototype.compile // 编译正则表达式。
RegExp.prototype.test // 检索字符串中指定的值。返回 true 或 false。
RegExp.prototype.exec // 检索字符串中指定的值。返回找到的值,并确定其位置。
应用注意点
字符串
-
字符串的
macth
方法,不带g
,返回标准内容;带g
,返回全部匹配内容。 -
字符串的
split
方法,第2个参数可以限定结果数组的长度。 -
字符串的
split
方法,利用正则匹配并使用了分组时,结果数组中会包含分组字符。 -
字符串的
search
和match
方法,会把字符串自动转为正则。 -
字符串方法带
g
时,不会修改reg.lastIndex
,始终为0。
正则原型方法
-
exec
方法,始终返回标准内容,不受是否带g
的影响。 -
exec
方法,每次调用只会匹配一个,可以连续匹配,匹配不到后会重置索引。 -
test
方法,默认是部分匹配,如需整体匹配,需要加^和
$`限定。 -
exec
和test
方法带g
时,会修改reg.lastIndex
,可能不是0。
构造函数用法
- 对于元字符和转义字符需要再多加一个斜杠
\
。