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的正则方法
search()
:传入正则表达式,若传入的是字符串,则会转为正则表达式。返回第一次匹配项的起始位置。若不匹配,则返回-1.replace()
:第一个参数可以是正则表达式也可以是字符串,第二个参数是要将与第一个参数匹配的匹配项替换的东西,可以是函数或字符串。若为函数,则参数为macth,(p1,p2..),offset,str.match为匹配项,(p1,p2..)为第n个括号匹配的字符串,offset是匹配项在调用字符串中的位置,str是调用的字符串。若正则表达式中含//g
,则会将全部匹配项都替换。返回替换后的字符串。
match()
:返回数组。若包含全局修饰符g
,则数组元素分别为每次的匹配项。若为传入g
,则数组第一个元素是匹配项,后面分别为圆括号的匹配项。返回的数组包含input
和index
属性。input
表示调用字符串,index
表示匹配项在调用字符串中的索引。split()
:返回数组。传入分隔符或正则表达式。
3. RegExp对象
3.1 RegExp属性
以下属性返回布尔值。即是否包含相应修饰符。
- `global`
- `multiline`
- `ignoreCase`
- `sticky`:是否包含`y`修饰符
以下不返回布尔值
- `lastIndex`:整个字符串下一次搜索开始的位置。
- `source`:正则表达式文本。
- `flags`:使用了哪些修饰符
3.2 RegExp方法
exec()
:传入字符串。不管什么时候都返回与不传入g
的match
方法相同的数组。第2次调用该方法时会从lastIndex
位置开始。可以设置lastIndex
属性执行下一次开始查找匹配的位置。input
表示调用字符串,index
表示匹配项在调用字符串中的索引。test()
:传入字符串。返回布尔值,若匹配则返回true。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。