重难点
- 贪婪模式
- 非贪婪模式
- 捕获性分组
- 非捕获性分组
- 正向前瞻
- 负向前瞻
- exec()
- lastIndex
- 特殊组合:? ?: ?= ?!
元字符
正则表达式有两种基本字符类型组成
- 原义文本字符
- 元字符
元字符是在正则表达式中有特殊含义的非字母字符
* + ?¥ . | \ () {} []
字符类
[]
例
[abc]
字符类取反
[^] 例
[
^
abc]
范围类
[a-z] [A-Z] [0-9]
预定于类
.等价于[^\r\n]
\d
等价于[0-9]
\D
等价于[^0-9]
\s
等价于[\t\n\x0B\f\r]
\S
等价于[^
\t\n\x0B\f\r
]
\w
等价于[a-zA-Z_0-9]
\W
等价于
[^a-zA-Z_0-9]
^以什么开头
$以什么结尾
\b单词边界
\B非单词边界
量词
? 出现0次或1次
+ 出现一次或多次
* 出现0次或多次
{n} 出现n次
{n,m} 出现n-m次
{n,} 至少出现n次
贪婪模式
正则表达式在匹配的时候默认尽可能多的匹配这种模式叫贪婪模式
非贪婪模式只需在量词后加上?即可
分组(也叫捕获性分组)
()()()
$3
$3 $3
忽略分组(也叫非捕获性分组)
只需再分组中加上?:
(?:)在匹配的时候回自动忽略该分组中的内容
前瞻后顾
正则表达式从文本头部向尾部开始解析,文本尾部方向成为‘前’,文本头部方向成为‘尾’
前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾或后瞻方向相反,js不支持后顾
符合前瞻断言的称为正向匹配,不符合前瞻断言的称为负向匹配
正向前瞻 exp(?=assert)
负向前瞻
exp(?!assert)
lastindex
当前匹配结果的最后一个字符的下一个字符
var reg1=/\w/;
var reg2=/\w/g;
while (reg2.test('ab')){
console.log(reg2.lastIndex);
}
解析:首先匹配到’a’,当前匹配结果的最后一个字符就是‘a’,’a’的下一个字符是’b’,’b’所在的位置是1 故能打印出1,然后接着匹配,匹配到‘b’,当前匹配结果的最后一个是‘b’,b的下一个字符是空,空字符所在的位置是2,再接着匹配,因为再往后就没有字符了所以匹配不到故放回false
exec
使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果。如果没有匹配的文本则返回null,否则返回一个结果数组
index声明匹配文本的第一个字符的位置
input存放被检索的字符串string
RegExp.
exec
(
str
)
exec非全局调用
调用非全局的RegExp对象的exec()时,返回数组
第一个元素是与正则表达式相匹配的文本
第二个元素是与RegExpObject的第一个子表达式相匹配的的文本(如果有的话)
第三格元素是与RegExp对象的第二个子表达式相匹配的文本(如果有的话),以此类推
search() 有无g标志,匹配结果差不多
match()
match非全局调用(和exec的方法一样)
使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果。如果没有匹配的文本则返回null,否则返回一个结果数组
index声明匹配文本的第一个字符的位置
input存放被检索的字符串string
match全局调用如果regexp具有标志g则match方法将执行全局检索,找到字符串中的所有匹配子字符串
没有找到任何匹配子串则返回null,如果找到了一个或多个匹配子串则返回一个数组,数组元素中存放的是字符串中所有的匹配子串,而且也没有index属性或input属性
str.match(RegExp)
split()
replace()
str.replace(RegExp,”);
str.replace(RegExp,function(){})
function会在每次匹配替换的时候调用,有四个参数
1、匹配的字符串
2、正则表达式分组内容,没有分组则没有该参数,有多个分组就有多个参数
3、匹配项在字符串中的index
4、原字符串
test() exec()是正则表达式提供的方法所以在调用的时候是 RegExp.test()或RegExp.exec()
其他的几个方法是字符串提供的方法,所以调用的时候是 str.方法 来调用
RegExp对象的静态属性
属性 | 短名 | 含义 |
input | $_ | 当前被匹配的字符串 |
leftContext | $` | 最后一次匹配前的子串 |
rightContext | $ | 在上次匹配之后的子串 |
lastMath | $& | 最后一个匹配字符串 |
lastParen | $+ | 最后一对圆括号内的匹配子串 |
multiline | $* | 用于指定是否所有的表达式都用于多行的布尔值 |
RegExp对象的实例属性
属性 | 含义 |
global | Boolean值,表示g是否已设置 |
ignoreCase | Boolean值,表示i是否已设置 |
lastIndex | 整数,代表下次匹配将从哪里字符位置开始 |
multiline | Boolean值,表示m是否已设置 |
Source | 正则表达式的源字符串形式 |
正则获取控制方法列表
字符类:单个字符和数字
元字符/元符号 | 匹配情况 |
. | 匹配除换行符外的任意字符 |
[a-z0-9] | 匹配括号中的字符集中的任意字符 |
[^a-z0-9] | 匹配任意不在括号中的字符集中的字符 |
\d | 匹配数字 |
\D | 匹配非数字,同[^0-9]相同 |
\w | 匹配字母和数字及_ |
\W | 匹配非字母和数字及_ |
字符类:空白字符
元字符/元符号 | 匹配情况 |
\0 | 匹配null字符 |
\b | 匹配空格字符 |
\f | 匹配进纸字符 |
\n | 匹配换行符 |
\r | 匹配回车字符 |
\t | 匹配制表符 |
\s | 匹配空白字符、空格、制表符和换行符 |
\S | 匹配非空白字符 |
字符类:锚字符
元字符/元符号 | 匹配情况 |
^ | 行首匹配 |
$ | 行尾匹配 |
\A | 只有匹配字符串开始处 |
\b | 匹配单词边界,词在[]内时无效 |
\B | 匹配非单词边界 |
\G | 匹配当前搜索的开始位置 |
\Z | 匹配字符串结束处或行尾 |
\z | 只匹配字符串结束处 |
字符类:重复字符
元字符/元符号 | 匹配情况 |
x? | 匹配0个或1个x |
x* | 匹配0个或任意多个x |
x+ | 匹配至少一个x |
(xyz)+ | 匹配至少一个(xyz) |
x{m,n} | 匹配最少m个、最多n个x |
字符类:替代字符
this|where|logo
匹配this或where或logo中任意一个
字符类:记录字符
元字符/元符号 | 匹配情况 |
(string) | 用于反向引用的分组 |
\1或$1 | 匹配第一个分组中的内容 |
\2或$2 | 匹配第二个分组中的内容 |
\3或$3 | 匹配第三个分组中的内容 |