1. 创建
- 创建固定的正则,可以直接使用字面量。如果要动态构建,需 new RegExp() 传入拼接的字符串
2. 一些规则
-
()
既可以表示分组,又可以用来捕获。有些分组是不需要被捕获的,这会造成多出了一些无用的捕获。可以使用(?:)
,它可以仅分组,不捕获 -
(a(bc)) ,括号嵌套表示 capture sub-group
-
^
匹配起始(如果开启了匹配多行模式,也匹配每行的开始),$
匹配结束 -
或:
[abc]
表示单字或,(abc|cdf|fgb)
表示多字或,[a-z]
表示范围,但要表示a
或-
或z
,可以写成[az-]
或者[a\-z]
使它们不构成范围 -
反向引用: 使用
\1
引用第一个捕获条件捕获到的字符串,相当于是动态的正则 例:/ad(\d{2})[陕甘宁]\1/
可以匹配'ad23 陕 23'
'ad11 陕 11
''ad90 甘 90'
;如果引用的是不存在的分组,那它表示的就是普通的转义 -
匹配任意字符
[\s\S]\*
:\s
匹配空白字符,\S
匹配非空白字符 -
[\w\W]\*? [\w\W]
能匹配到换行呢; -
\w
匹配单词字符 [a-z][a-z][0-9],\W
匹配非单词字符 -
w:word ,d:digit ,s:space ,b:boundary ,r:return
-
\r \n 回车符
-
\b
匹配一个单词边界 : 例如/er\b/
可以匹配'never'
,但不能匹配'verb'
,只要 er 后面跟的不是字母、数字、下划线(就是 js 里能用来命名的字符),都算单词边界;\B
非单词边界
![](https://img.haomeiwen.com/i15528678/6b958b88bbf4e04d.png)
3. 支持正则的相关方法
3.1 reg.test(str)
检验字符串是否符合要求:/regexp/.test(str)
,返回布尔值
3.2 String.prototype.match
-
局部匹配:
str.match(/regexp/)
匹配到第一个符合的字符串就结束,返回数组 arr,arr[0]为符合此 regexp 的第一个字符串,arr[1]为用()捕获到的字符串。未匹配到时返回 null。 -
全部匹配:在正则后面加
g
(global),str.match(/regexp/g)
匹配符合的全部字符串,放到数组里返回,未匹配到时返回 null。 -
使用完 match或test 后,可以使用 Regexp.$1 拿到刚匹配完后捕获的分组引用;
3.3 String.prototype.search
3.4 String.prototype.replace
字符串替换 str.replace(/regexp/, str2)
; 将 str 里符合 regexp 的字符串替换为 str2。replace 方法的第二个参数也可为 function,function 入参 1:匹配,入参 2:捕获。类似局部匹配的返回值
3.5 String.prototype.split
4. 零宽断言
零宽,意味着不会返回匹配的字符
4.1 正向否定断言(?!):后面不是什么。
不允许该位置后符合括号里的情况,
![](https://img.haomeiwen.com/i15528678/1734bf6465280904.png)
![](https://img.haomeiwen.com/i15528678/e7fce43a113de03a.png)
4.2 正向断言(?=):后面是什么
![](https://img.haomeiwen.com/i15528678/20901958b9ef8520.png)
给整数每3位加一个逗号:numStr'.replace(/(\d)(?=(\d{3})+1,')
![](https://img.haomeiwen.com/i15528678/5271058f0d6b779a.png)
4.3 负向断言(?<=):前面是什么
该位置之前要符合括号里的情况
![](https://img.haomeiwen.com/i15528678/aa365f11d24e5677.png)
4.4 负向否定断言(?<!):前面不是什么
不允许该位置之前符合括号里的情况
![](https://img.haomeiwen.com/i15528678/1392591994399b08.png)
5. 贪婪匹配和惰性匹配:
所谓的"贪婪"的意思就是,如果符合要求就一直往后匹配,一直到无法匹配为止,这就是贪婪模式。所谓的惰性模式就是一旦匹配到合适的就结束,不再继续匹配下去了;
-
贪婪模式的标识符 + ? * {n} {n,} {n,m}
-
惰性模式的标识符 +? ?? *? {n}? {n,}? {n,m}?
![](https://img.haomeiwen.com/i15528678/6a0946dcda0399d6.png)
![](https://img.haomeiwen.com/i15528678/df226ce95c51694f.png)
![](https://img.haomeiwen.com/i15528678/bb18f9e5104e2f94.png)
网友评论