1. 正则表达式语法
1.1 表示方法
- `//`字面量模式,`/表达式/修饰符` - 使用`new RegExp(字符串,修饰符 | 正则表达式)`构造函数。 在ES5中,参数是正则表达式时不允许传入第二个参数。 在ES6中,当第一个参数为正则表达式是,可以传入第二个参数修饰符,这时第二个参数的修饰符会覆盖第一个参数正则表达式之中的修饰符。
1.2 字符类[]
[]
:匹配[]
中的任意字符[^]
:不在[]
中的任意字符.
:除换行符或其他终止符之外的任意字符。
以下的大写都是小写的取反:\w
:[a-zA-Z0-9]
\W
:[^a-zA-Z0-9]
\s
:任意unicode空白符\S
:[^\s]
\d
:[0-9]
\D
:[^0-9]
[\b]
:退格
1.3 重复
{n,m}
:出现n<= 次数 <= m{n,}
: >=n 次{n}
: n次?
: {0,1}+
: {1,}*
: {0,}
以上情况是尽可能多的匹配,称为贪婪匹配.
在重复次数后面加上“?”,如“+?”则为尽可能少的匹配,称为非贪婪匹配。
var r1 = /a+/ var r2 = /a+?/ var str = 'aaa' str.match(r1) //['aaa'] str.match(r2) //['a']
1.4 位置
^
:匹配开头$
:匹配结尾\b
:匹配一个单词的边界,注意与[\b]
的区别\B
:非单词的边界/x(?=y)/
:称为“先行断言”。只匹配在y前面的x./x(?!y)/
:称为“先行否定断言”。只匹配不在y前面的x.
1.5 修饰符
i
:大小写不敏感g
:全局匹配。即找到所有,而不是找到一个就停止。y
:(ES6新增)粘连修饰符。与g
相似。但y
下一次开始查找时从匹配的下一个位置开始,即如果下一个位置不匹配则返回null.而g
只要剩余位置存在匹配即可。设计目的是为了让^
在全局范围内有效。m
:多行匹配。即匹配一行的开头结尾 + 字符串的开头或结尾u
:(ES6新增)。主要针对ES6对Unicode字符进行扩展之后的匹配。包括对.
,{}
中的改善。详见阮一峰老师的ES6教程
1.6 选择
|
: 相当于“或”。即/ab|cd/
可以匹配“ab”,也可以匹配“cd”。但它从左至右匹配,直到发现匹配项。即若你以匹配“ab”,则不匹配“cd”.
1.7 分组/引用
圆括号的作用:
1. 即把很多项组合成独立的单元来处理。 2. 定义子模式。即在已匹配中找到符合圆括号内的匹配项。 3. 在正则表达式后部引用前面的子表达式。即后面可以使用`\n`来表示匹配的表达式是前面的括号中的表达式.`\n`中的n代表第几个括号。
2. String的正则方法
match()
:返回数组。若包含全局修饰符g
,则数组元素分别为每次的匹配项。若为传入g
,则数组第一个元素是匹配项,后面分别为圆括号的匹配项。返回的数组包含input
和index
属性。input
表示调用字符串,index
表示匹配项在调用字符串中的索引。split()
:返回数组。传入分隔符或正则表达式。
3. RegExp对象
3.1 RegExp属性
以下属性返回布尔值。即是否包含相应修饰符。
- `global` - `multiline` - `ignoreCase` - `sticky`:是否包含`y`修饰符
以下不返回布尔值
- `lastIndex`:整个字符串下一次搜索开始的位置。 - `source`:正则表达式文本。 - `flags`:使用了哪些修饰符