JavaScript对象编程(七)
正则表达式
什么是正则表达式
正则表达式(Regular Expression,简称为RegEx),是用来匹配一系列符合某个规则的字符串的表达式
正则表达式独立于编程语言,几乎所有的编程语言甚至文字处理软件都支持正则表达式
应用场景
<a rel="nofollow" class="rshare-tb" target="_blank" href="https://www.taobao.com/" title="淘宝">投稿</a><a rel="nofollow" class="rshare-jd" target="_blank" href="https://www.jd.com/" title="京东">京东</a><a rel="nofollow" class="rshare-pdd" target="_blank" href="https://www.pinduoduo.com/" title="拼多多">拼多多</a>
-
从大量文本中查找符合某一规则的文本
-
验证用户输入是否符合格式
基本语法
/正则表达式主体/修饰符(可选)
修饰符为可选,但一般使用g,代表全局匹配
如何使用正则表达式
- split()
- replace()
- search()
- match()
常用的使用正则表达式的方法,支持传入字符串或正则表达式
search()
返回要查找的字符第一次出现的位置下标,若未找到返回-1
match()
返回所有要查找的字符的值,并存入数组
正则对象
创建正则对象
正则对象有三个方法compile()、exec()、test()
compile()
用于改变 RegExp
exec()
检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 n
test()
检索字符串中的指定值。返回值是 true 或 false
当使用了修饰符g时,test()和exec()会储存每一次运行的记录,下一次运行会从上一次储存的位置开始
正则表达式规则
[] 匹配字符组
满足[]内的任意字符即匹配成功
/[js]/g 可匹配j与s
- 区间
/[0123456789]/g 等同于/[0-9]/g
/[0-9a-zA-Z]/g 可匹配所有的数字及大小写字母
\ 转义字符
/-/g 可匹配字符“-”
^ 取反
在字符数组开头使用 ^ 字符实现取反操作
/[^0-9]/g 可匹配所有非数字的字
\w 匹配任意字符,包括[0-9],[a-z],[A-Z]及下划线
\d 匹配数字,包括[0-9]
\s 匹配空白 包括空格、制表符、换行符等
\W 匹配非字符
\D 匹配非数字
\S 匹配非空
\b 单词边界
仅匹配有边界的单词
/\bhello/g 匹配 “hellohello hello-hello” 第二个hello无法匹配成功,因为该单词前面紧接其他字符,即没有边界
/\bhello\b/g 匹配 “hellohello hello-hello” 第一个和第二个hello都无法匹配成功
^ $ 开始和结束
/^h/g 匹配以h开头的字符串
/s$/g 匹配以s结尾的字符串
. 任意字符
.代表任意字符、但不能代表\n换行符
/Jav./g 可匹配Java、Javs、Javo、Jave
/J…/g 可匹配J开头的4位字符
? 可选字符
?可以指定某个字符可选,出现0次或1次
/colou?r/g 可匹配color和colour
/Ja.?a/g 可匹配Jaa和Jav
{N} 重复
{N}代表某字符或字符组出现N次
/\d{4}/g 代表任意4位数字
{M,N} 重复区间
代表某个字符或字符组出现M到N次
/\d{3,5}/g 可匹配3位、4位、5位数字
? 非贪婪模式
/\d{3,5}/g 默认为贪婪模式,如“123456”会匹配前5个字符
/\d{3,5}?/g 为非贪婪模式,如“123456”会匹配前3个字符
{N,}开闭区间
{N,}代表某字符或字符组出现N次到无限次
/\d{1,}/g 代表任意数字出现1次到无限次
/\d{0,}/g 代表任意数字出现0次到无限次
*+简写
+表示{1,} 即/d+/g 等同于 /\d{1,}/g
*表示{0,} 即/d/g 等同于 /\d{0,}/g
练习
使用正则表达式验证用户输入的电话号码是否合法
电话号码规则为
.11位数字
.第一位为1
.第二位为3~9