从现实需求理解正则表达式

在 JavaScript中,正则表达式也是对象。

如何创建一个正则表达式?

方法一:使用一个正则表达式字面量,其由包含在斜杠之间的模式组成,如下所示:

1
const regex = /abc/;

方法二:调用RegExp对象的构造函数

1
let regex = new RegExp("ab+c");// 本文不对 RegExp对象 做介绍

如何使用?

方法一:简单模式,由简单的字符所构成的。如 /abc/

例子:

1
let isEqual = /13566668888/.test(value);

只要 value 含有 “13566668888” 这串数字,isEqual 就为 true。

Demo地址

方法二: 使用特殊字符,如 /^abc$/

例子:

1
let isEqual = /^13566668888/.test(value)

只要 value 开头前9个字符前必须是 “13566668888”,isEqual 才为 true,

Demo地址

平时开发中,常用的是特殊字符。

特殊字符:$

1
let isEqual = /13566668888$/.test(value);

只要当 value 后面9个字符是 “13566668888” ,isEqual 就为 true;

Demo地址

需求1

如何匹配一个9个数字的手机号码?

方法一:

1
let isEqual = /^1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$/.test(value);

其中方括号”[]” 表示查找方括号之间的任何字符,方括号里面 0-9 表示在 0到9的数字都可以匹配到,对于 [a-z] 同样,可以匹配到字符 a 到字符 z之间的任意字符。

但显然这个方式很繁琐。

元字符:\d

1
let isEqual = /^1\d\d\d\d\d\d\d\d\d\d$/.test(value);

元字符:”\d” 表示数字,但还是很繁琐。。

量词

1
let isEqual = /^1\d{10}$/.test(value);

\d{10} 表示匹配包含10个数字的字符串,n{X} 匹配包含 X 个 n 的序列的字符串

需求2

如何匹配邮箱?

方法:

1
let isEqual = /.+@163\.com$/.test(value);

知识点: 元字符 + 量词 + 转移符

“.” 表示查找单个字符

“+” 表示匹配任何包含至少一个 n 的字符串。

“\ .” 反斜杠表示将其后的特殊字符转义为字面量。

因此上述正则表达式的意思是,先匹配 n个字符串,然后再匹配 @163,等将小数点”.” 转义后,再匹配 “.com” 结尾,这样就能完成匹配一个邮箱的需求。

Demo地址

需求3

那如何匹配不同的邮箱呢?

方法:

1
let isEqual = /(.+)@(163|126|188)\.com$/.test(value);

知识点:

(.+), 匹配 ‘.+’ 并且记住匹配项,括号被称为捕获括号。

(163|126|188),“|” 表示匹配‘163’或者‘188’。

本文从三个需求入手,带领读者直观地感受正则表达式对于匹配字符串的作用。更多的特殊字符的用法请参考文档即可。

参考资料

W3c-正则表达式

MDN-正则表达式