正则表达式
正则表达式是国际标准,跨语言。
正则表达式是一个规则,用于验证字符串。
基础
- 字面量匹配
规则中直接书写字面量字符
- 特殊字符
.匹配除换行符之外的任何单个字符。^匹配输入的开始。$匹配输入的结束。()标记一个子表达式的开始和结束位置
- 转义符
\n匹配一个换行符\r不要使用,出现在 Windows 操作系统中。\t匹配一个制表符\s匹配一个空白字符,包括空格、制表符、换页符和换行符。\S匹配一个非空白字符。\b匹配一个单词的边界。\B匹配一个非单词边界。\d匹配一个数字。等价于[0-9]。\D匹配一个非数字字符。等价于[^0-9]。\w匹配一个单字字符(字母、数字或者下划线)。等价于[A-Za-z0-9_]。\W匹配一个非单字字符。等价于[^A-Za-z0-9_]。\uhhhh匹配一个十六进制数表示的 Unicode 字符。h表示一个十六进制的 Unicode 字符
转义符\可以将特殊字符转义
- 字符集
[字符范围][^字符范围] 对字符范围取反
匹配中文:[\u4e00-\u9fa5]
- 量词
匹配前面一个表达式出现的次数
*匹配前一个表达式 0 次或多次。等价于 {0,}。+匹配前一个表达式 1 次或多次。等价于 {1,}。?匹配前面一个表达式 0 次或者 1 次。等价于 {0,1}。{n}匹配 n 个{n,}匹配 >=n 个{n,m}匹配 n~m 个
- 或者
多个规则之间适用,或者|,表示多个规则任选其一。
JS 中的应用
JS 中,正则表达式表现为一个对象,是通过构造函数 RegExp 创建的
创建正则对象
字面量
由斜杠包围而不是引号包围。
/正则表达式/构造函数模式
//以下三种表达式都会创建相同的正则表达式:
;/ab+c/i
new RegExp('ab+c', 'i')
new RegExp(/ab+c/, 'i')静态属性
RegExp.lastIndex
该索引表示从哪里开始下一个匹配
实例属性
global
判断是否开启全局匹配,根据情况返回 true 或 false。
ignoreCase
是否忽略字符大小写。
multiline
是否开启多行模式匹配。
source
得到正则表达式的文本,不包括正则字面量两侧的斜杠与标志字符。
实例方法
test()用来查看正则表达式与指定的字符串是否匹配,返回 true 或 false。
exec()execute 的缩写,执行匹配,得到匹配的结果,返回一个结果数组或 null。
正则表达式,默认情况,使用贪婪模式(尽可能多匹配)
在量词后面,加上
?,表示进入非贪婪模式。
字符串对象中的正则
match()使用正则表达式与字符串相比较。
返回值:
- 如果使用 g 标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。
- 如果未使用 g 标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。返回的数组有附加属性
- groups: 一个捕获组数组 或 undefined(如果没有定义命名捕获组)。
- index: 匹配的结果的开始位置
- input: 搜索的字符串.
search()对正则表达式和指定字符串进行匹配搜索,返回第一个出现的匹配项的下标。
split()使用指定的分隔符字符串将一个 String 对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。
语法:
str.split([separator[, limit]])
参数:
separator
指定表示每个拆分应发生的点的字符串。separator 可以是一个字符串或正则表达式。
limit
一个整数,限定返回的分割片段数量。
replace()MDN返回替换后的新字符串,原字符串不会改变。
语法:
str.replace(regexp | substr, newSubStr | function)参数:
regexp (pattern)
一个 RegExp 对象或者其字面量。该正则所匹配的内容会被第二个参数的返回值替换掉。
substr (pattern)
一个将被 newSubStr 替换的 字符串。其被视为一整个字符串,而不是一个正则表达式。仅第一个匹配项会被替换。
newSubStr (replacement)
用于替换掉第一个参数在原字符串中的匹配部分的字符串。该字符串中可以内插一些特殊的变量名。
function (replacement)
一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。
进阶
捕获组
用小括号包裹的部分叫做捕获组,捕获组会出现在匹配结果中。
(正则表达式)
捕获组可以命名,叫做具名捕获组。在小括号前添加 ?<捕获组名字>
(?<捕获组名字>正则表达式)
非捕获组 在小括号前添加 ?:
(?:正则表达式)
反向引用
在正则表达式中,使用某个捕获组,\捕获组编号
正向断言(预查)
检查某个字符后面的字符是否满足某个规则,该规则不成为匹配结果,并且不成为捕获组。 (?=正则表达式)
正向断言(预查)
检查某个字符后面的字符是否不满足某个规则,该规则不成为匹配结果,并且不成为捕获组。(?!正则表达式)