正则表达式,一种增强版的通配符,可以帮我们匹配指定规则的字符串。
工具:正则表达式在线测试工具:[regex101.com/] (build, test, and debug regex )
1. 基础用法:
1.1 常用限定符
?代表前面的字符可以出现0次或者1次
示例: 匹配下面字符中的html标签 (即<div><p></p></div>)
<div><p> matching the tag </p></div>
则可用/<\/?\w+>/来匹配,其中 \/?即表示/这个符号可有可无(因为/为一个特殊字符串,所以使用\转义,\/代表匹配字符/)
\/? 等价于 \/{0,1} 即/这个符号可以出现0次或1次
*代表前面的字符可以匹配0到多次
示例:/go*gle/
可以匹配
google gooooogle gogle ggle
但是无法匹配
gigle
+表示前面的字符出现1次及以上
例如/go+gle/
'ggle'.match(/go+gle/) //null
'gooooogle'.match(/go+gle/) //gooooogle
'gogle'.match(/go+gle/) //gogle
{}表示限定字符出现的次数
例如:
{m} //表示出现m次
{m,} //表示出现m次及以上
{m,n},//表示可以匹配最少m次,最多n次
示例:当我们匹配手机号码时,可以使用/^1[3-9]\d{9}\b/
其中,\d{9} 表示可以匹配9个数字字符
1.2 特殊字符
()可以用来指定子表达式(分组)
例如: /(go)+/ 表示go作为整体出现1次及以上
const str = 'gogogoooo';
str.match(/(go)+/g);
// -> ['go', 'go', 'go']
str.match(/(go)+/g);
// -> ['gogogo']
-
|表示或运算 -
[]表示匹配[...]中的所有字符
还可以在`[]`中指定字符的范围
例如:`/[a-zA-Z0-9]+/` (`+`*表示前面的字符出现1次及以上*)
`[^ABC]` 表示匹配除了 `[...]` 中字符的所有字符
例如`/[^0-9]+/` 表示匹配所有的非数字字符
^表示匹配行首,$表示匹配行尾
例如 /^1/ 表示匹配行首的"1"
/d$/ 表示匹配行尾的"d"
1.3 简写
| 简写 | 字符组 | 含义 |
|---|---|---|
| \d | [0-9] | 匹配一个数字 |
| \D | [^0-9] | 匹配一个非数字字符 |
| \w | [0-9a-zA-Z_] | 单词字符,数字、大小写字母、下划线,(word) |
| \W | [^0-9a-zA-Z_] | 非单词字符 |
| \s | [ \t\v\n\r\f] | 空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符,(space) |
| \S | [^ \t\v\n\r\f] | 非空白符 |
| . | [^\n\r\u2028\u2029] | 通配符,表示几乎所有字符,除了换行符、回车符、行分隔符和段分隔符(...) |
表示所有字符,可用[\d\D]、[\w\W]、[\s\S]、[^]
2. 其他概念
2.1 贪婪、惰性匹配
*={} 匹配时,默认会尽可能多的字符,即为贪婪匹配;
在量词后面加?可实现惰性匹配,即尽可能少地匹配。
const str = '111111112';
str.match(/1{1,}/) // ["11111111"]
str.match(/1{1,}?/) // ["1"]
str.match(/1+?/) // ["1"]