文章目录
正则表达式
元字符及其作用
字符 | 作用 |
---|---|
\ | 转移字符,将下一个字符标记为特殊字符,如:\n表示换行符 |
^ | 匹配字符串的开始位置,如果设置了Multiple属性,它也匹配’\n’,’\r’之后的位置,如: /^b/匹配以b为开始的字符串(bus…) |
$ | 匹配字符串的结束位置,如果设置了Multip属性,它也匹配’\n’,’\r’之前的位置,如: /e$/匹配以e结束的字符串(apple…) |
{n} | 匹配前面字符(表达式)n次,如:/o{2}/匹配foo中的oo,不匹配box中的o |
{n,} | 至少匹配前面字符(表达式)n次(即 >= n),如:/o{4,}/匹配coooool中的o |
{n,m} | 匹配前面字符(表达式)最少n次,最多m次(即 n <= x <= m),如:/o{2,3}/匹配coooool中前3个o(非贪婪模式下匹配前两个o) |
- | 匹配前面字符(表达式)零次或多次,相当于{0,},如:/co*l/ 将匹配cool或cl
- | 匹配前面字符(表达式)一次或多次,相当于{1,},如:/co+l/ 将匹配cooool(中间o个数大于1即可)
? | 匹配前面字符(表达式)零次或一次,相当于{0,1},如:/jsx?/ 将匹配js或者jsx
? | ?字符还可以放在其他限制符(前面 *,+,?,{n},{n,},{n,m})后面,表示非贪婪匹配(即尽量少匹配字符,如:/co+/匹配coooool匹配到cooooo,而/co+?/匹配coooool匹配到co),默认为贪婪匹配
(pattern) | 括号(),匹配里面的子表达式,并获取匹配结果(捕获),称为捕获组,后续可以使用\1,\2等表示括号内内容,如:/(bili)\1/ 可以匹配bilibili 。需要注意:\1与前面括号捕获到的内容是完全相同的,而不只是符合匹配模式(pattern)。
(?:pattern) | 匹配括号内表达式pattern,但是不获取匹配结果,称为非捕获组,如:/cit(?:y|ies)/匹配city或者cities。
(?=pattern) | 正向肯定预查,匹配任何其后符合pattern模式的字符串。这个一个非捕获组,(预查不消耗字符,即下一次匹配从预查前面匹配到的地方开始匹配,而不是pattern的位置开始匹配)。如:/dis(?=able)/匹配disable中的dis
(?!pattern) | 正向否定预查,匹配任何其后不符合pattern模式的字符串。与(?=)类似,是一个非捕获组
(?<=pattern) | 反向肯定预查,匹配任何前面字符符合pattern模式的字符串。
(?<!pattern) | 反向否定预查,匹配任何前面字符吧符合pattern模式的字符串。
. | 匹配出换行符之外任意字符,若要匹配所有字符,可以使用类似/(.|\n|\r)/的形式
[xyz] | 字符集合,匹配x、y、z中任意一个字符。也可以使用缩写[0-9a-zA-Z]。如:/[0-9]+/将匹配一个或多个数字
[^xyz] | 负值字符集合,匹配不是x、y、z的任意一个字符。也可以使用上述的缩写形式。
x | y | 匹配x或者y,如/apple|pear/将匹配apple或者pear,而/appl(e|es)/将匹配apple或者apples
\w | 匹配[0-9a-zA-Z_](包括下划线)
\W | 匹配[^0-9a-zA-Z]
\b | 匹配单词边界(即\w与\W之间的边界)
\B | 匹配非单词边界
\d | 匹配一个数字[0-9]
\D | 匹配一个非数字[^0-9]
\s | 匹配空白字符,包括空格,换行符,回车符,制表符
\S | 匹配非空白字符
\un | n为4个16进制表示的Unicode字符。
优先度
正则表达式从左到右进行计算
运算符 | 描述 |
---|---|
\ | 转义 |
(),(?:),(?=),(?!),(?<=),(?<!),[] | 括号 |
*,+,?,{n},{n,},{n,m} | 限定符 |
| | 或操作 |
使用正则表达式的函数
正则方法
- exec() 返回一个数组,没匹配到返回null。
- test() 返回一个Boolean值
String方法
- match() 加g与不加g返回不一样
- 不加g的情况下,跟exec返回的相同,加了g的情况下返回匹配的数组
- search() 返回匹配的第一个字符index
- replace()
- split()