JavaScript的String类和RegExp对象类都定义了相关方法使用正则表达式进行模式匹配,本文将以连载方式介绍JavaScript常用正则表达式与相关应用,欢迎交流
本节是连载一,首先介绍JavaScript语言常用的正则表达式,如何应用将在后几篇介绍。
所有案例将采用在线正则表达式验证工具RegExr进行测试,地址是:http://regexr.com/v1/,本节测试截图均来自该网站。
1.匹配字符串字面值:
正则表达式字面值包含在一对正斜杠内,如:var parttern=/P/ ,意为匹配大写字符"P"(使用RegExr测试时不用输入正斜杠,直接在match一栏输入字面值即可)
如下图所示,在match一栏输入"P"(同时勾选global和multiline,含义将在下文解释),将目标文档中所有的大写字母"P"均以蓝绿色高亮显示:
输入任何在本文中出现的字符或数字,都会实现直接匹配效果,感兴趣的可以继续尝试。
2.匹配字符集与字符集简写
如果想匹配目标文本中的某一类字符,比如数字、空格或者是小写字母,则要使用字符集,以下给出了常用字符集正则表达式和其简写形式:
下图为测试数字匹配的实例,[0-9]和\d的匹配结果一致:
另外,在RegExr中可使用点号"."匹配任意字符,详见下图:
3.匹配元字符字面值
正则表达式中有些字符输入字面值是不会予以匹配的,这些字符即为元字符。元字符有如下几种:^ $ . * + ? = ! : | \ / ()[]{} 每个元字符都有其特殊含义,下文将一一解释。元字符字面值不参与匹配,如需匹配元字符内容则有如下两种常见方式:
1)对元字符用反斜杠"\"进行转义,下例用"\."来匹配点号"."字面值:
2)将元字符放入\Q和\E之间,下例用"\Q.\E"来匹配点号"."字面值:
4.正则表达式的量词
在上文-2节中,我们在RegExr中勾选global,并使用\d来匹配目标文本中出现的所有数字。所有数字均被高亮显示。
如果我们要匹配目标文本的电话号码Tel.(089)387109-0,要怎么处理呢?这个电话号码由()括起来的3位区号,5位数字,连接符-,后加1位数字组成。可使用如下语法匹配电话号码:
\(\d{3}\)\d{6}[-]\d{1}(?=\;)
以下是对该语法的逐条解释:
上式使用了(?=\;)来保证只匹配电话号码。如果要既要匹配电话号码,也要匹配传真号,需要使用下式:
\(\d{3}\)\d{6}[-]\d{1,2}
其中,d{1,2}表示可以匹配至少1位数字,至多2位数字。由下图可见,该表达式可同时匹配目标文档的电话号码与传真号:
正则表达式量词除了上文使用的\d{n}和\d{n,m}外,还有问号"?"、星号" *"和加号"+",分别有不同含义: