正则表达式
正则表达式速查表
基本匹配
也就是执行普通的匹配,只要匹配出来即可。
"the" => The fat cat sat on the mat.
正则表达式是大小写敏感的,所以要匹配出来的字符串必须和正则表达式完全一致。
点运算
点运算符用于匹配一个字符串中的任意字符。但是不匹配换行符。如 .ar 可以匹配 car、bar、far 等。a.r 可以匹配 car、bar、far 等。bo.r 可以匹配 bore、born、bore 等。
".ar" => The car parked in the garage.
字符集
字符集用于指定连字符的范围。如 [abc]ar 可以匹配 car、bar、far 等。a[abc]r 可以匹配 car、bar、far 等。bo[abc]r 可以匹配 bore、born、bore 等。字符集中不关心顺序,如 [abc]ar 和 [cba]ar 是一样的。
"[Tt]he" => The fat cat sat on the mat.
与此同时 [.] 就表示匹配一个点号。
"[.]" => The fat cat sat on the mat .
否定字符集
指定不选的字符集。如 [^abc]ar 可以匹配 dar、ear、far 等,但是不匹配 car、bar、aar 等。
"[^T]he" => The fat cat sat on the mat.
重复次数
+ * ? 用于表示匹配子模式的次数。
*
* 表示匹配前面的子模式零次或多次。如 a* 可以匹配 a、aa、aaa 等,表示匹配多个以 a 开头的字符串。
"[a-z]*" => The fat cat sat on the mat #21.
T 没有匹配上是因为 T 不在 a-z 范围内。 #21 同理。
* 字符和.字符搭配可以匹配所有的字符.*。 *和表示匹配空格的符号\s连起来用,如表达式\s*cat\s*匹配 0 或更多个空格开头和 0 或更多个空格结尾的 cat 字符串。
"\scat\s" => The fat cat sat on the concatenation.
+
+ 表示匹配前面的子模式一次或多次。如 c.+t 可以匹配 cat、cadat、cadxdcaddt 等,表示匹配以 c 开头,以 t 结尾的字符串,中间可以有任意多个字符。包括空格,但不包括换行符。
"c.+t" => The fat cat sat on the mat.
?
表示在符号前面的字符为可选,即匹配零次或一次。如 colou?r 可以匹配 color、colour 等,表示匹配 color 或者 colour。
[T]?he=> The car is parked in the garage.
{}
用来限定一个或一组字符可以重复出现的次数,[0-9]{2,3} 表示匹配 2 到 3 个数字。
[0-9]{2,3}=> The number was 9.9997 but we rounded it off to 10.0.
省略第二个数字表示匹配次数不限,如 [0-9]{2,} 表示匹配 2 个以上的数字。逗号也可以省略,如 [0-9]{2} 表示匹配 2 个数字。
(...) 特征标群
例如, 表达式 (ab)* 匹配连续出现 0 或更多个 ab。如果没有使用 (...) ,那么表达式 ab* 将匹配连续出现 0 或更多个 b 。
我们还可以在 () 中用或字符 | 表示或。例如,(c|g|p)ar 匹配 car 或 gar 或 par.
"(c|g|p)ar" => The car is parked in the garage.
| 或
| 表示或。例如,c|g|p 匹配 c 或 g 或 p.
特殊字符转码
如果要匹配特殊字符,需要转码。如 . 表示匹配任意字符,如果要匹配 .,需要转码为 \.。
"(f|c|m)at." => The fat cat sat on the mat.
锚点
锚点用于匹配字符串的开始和结束。
^
^ 表示匹配字符串的开始。如 ^The 可以匹配 The Theme 等,表示匹配以 The 开头的字符串。
例如,在 abc 中使用表达式 ^a 会得到结果 a。但如果使用 ^b 将匹配不到任何结果。因为在字符串 abc 中并不是以 b 开头。
"^The" => The fat cat sat on the mat.
$
$ 表示匹配字符串的结束。如 at$ 可以匹配 cat bat 等,表示匹配以 at 结尾的字符串。
例如,在 abc 中使用表达式 c$ 会得到结果 abc。但如果使用 b$ 将匹配不到任何结果。因为在字符串 abc 中并不是以 b 结尾。
简写字符集
| 字符 | 含义 |
|---|---|
| \d | 匹配一个数字字符。等价于 [0-9]。 |
| \D | 匹配一个非数字字符。等价于 [^0-9]。 |
| \s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
| \S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
| \w | 匹配所有字母数字字符,包括下划线。等价于 [A-Za-z0-9_]。 |
| \W | 匹配所有非字母数字字符。等价于 [^A-Za-z0-9_]。 |
| \f | 匹配一个换页符。等价于 \x0c 和 \cL。 |
| \n | 匹配一个换行符。等价于 \x0a 和 \cJ。 |
| \r | 匹配一个回车符。等价于 \x0d 和 \cM。 |
| \t | 匹配一个制表符。等价于 \x09 和 \cI。 |
| \v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。 |
标志
标志用于控制正则表达式的匹配方式。
| 标志 | 含义 |
|---|---|
| i | 执行对大小写不敏感的匹配。 |
| g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
| m | 执行多行匹配。 |
/The/gi=> The fat cat sat on the mat.
"/.at(.)?$/" => The fat
cat sat
on the mat.
# 匹配 mat贪婪和懒惰
默认情况下,正则表达式是贪婪的,也就是说,它会尽可能多的匹配字符。例如,表达式 a.*b 将会匹配整个字符串 abab,而不是 ab。如果想要匹配尽可能少的字符,可以在 * 或 + 后面加上 ?,使表达式变成懒惰模式。例如,表达式 a.*?b 将会匹配 ab。
贪婪:
/(.*at)/=> The fat cat sat on the mat.
懒惰:
/(.*?at)/=> The fat cat sat on the mat.
示例
匹配邮箱
const email = 'example@foxmail.com';
const reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
console.log(reg.test(email)); // true匹配 URL
const url = 'https://www.baidu.com';
const reg = /^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/
console.log(reg.test(url)); // true匹配手机号
const phone = '13888888888';
const reg = /^1[3|4|5|7|8][0-9]{9}$/
console.log(reg.test(phone)); // true匹配身份证号
const idCard = '110101199003077777';
const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
console.log(reg.test(idCard)); // true匹配 IP 地址
const ip = '121.1.1.1';
const reg = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/
console.log(reg.test(ip)); // true匹配日期
const date = '2020-01-01';
const reg = /^(\d{4})-(\d{2})-(\d{2})$/
console.log(reg.test(date)); // true匹配 HTML 标签
const html = '<div>hello world</div>';
const reg = /<(\w+)>.*<\/\1>/
console.log(reg.test(html)); // true匹配中文
const str = '你好,世界';
const reg = /[\u4e00-\u9fa5]/
console.log(reg.test(str)); // true