一、正则表达式的定义方法
在JavaScript中,正则表达式是由一个RegExp对象表示的,利用RegExp对象来完成有关正则表达式的操作和功能。
正则表达式的定义共有2种方式:
(1)显式定义;
(2)隐式定义;
1、显式定义
所谓的“显式”就是让大家一眼就看出这就是正则表达式的定义,足够明显。
显式定义必须是使用new关键词来定义。
语法:
var 变量名 = new RegExp("正则表达式模式");
说明:
显式定义的正则表达式必须要使用双引号括起来,这里要注意字符串的转义。
2、隐式定义
所谓的“隐式”指的是有点阴阴湿湿,没那么明显,大家可能一眼没有看出这是正则表达式的定义。
语法:
var 变量名 = /正则表达式模式/
说明:
隐式定义的正则表达式开头和结尾都必须是斜杠“/”。
隐式定义是最常用的方式,建议大家以后都使用这种方式定义正则表达式,代码量少并且方便。
举例:
var myregex = new ReExp("[0-9]");
上面语句等价于下面:
var myregex = /[0-9]/;
test()方法
一、test()方法
在JavaScript中,可以使用RegExp对象的test()方法来指出被查出的字符串中是否匹配正则表达式模式。
语法:
regex.test(str)
说明:
regex为必选项,表示正则表达式模式。
str为必选项,表示字符串。
该方法返回一个boolean值。也就是说,test()方法检查字符串str是否符合正则表达式模式rgexp,如果符合,则返回true;如果不符合,则返回false。
验证邮政编码的正则表达式模式为“ \d{6}”。“\d{6}”表示6个字符都是数字,如果某一个字符串符合“6个字符都是数字”这种模式,那么test()方法就返回true,如果不符合,则返回false。
例如字符串“510632”就符合正则表达式模式“\d{6}”。而字符串“abc123”或“lvyestudy”就不符合正则表达式模式“\d{6}”,因为“abc123”虽然是6个字符,但是不符合所有字符都是数字。而“lvyestudy”不符合得原因有2点:①字符超过6个字符;②字符都不是数字。
常用元字符
在正则表达式中,包括2种字符:
(1)普通字符;
(2)特殊字符(元字符);
普通字符就是a~z、0~9这类常见的字符。其中特殊字符又称为“元字符”。元字符之所以叫特殊字符,就是它的特点跟普通字符不一样。例如邮政编码中,我们限定只能输入6个数字,那“数字”这个概念怎么理解呢?这个时候我们就用到了元字符\d来代替。
\d 匹配数字,相当于[0-9]
\D 匹配非数字,相当于[^0-9]
\w 匹配字母或数字或汉字或下划线
\W 匹配任意不是字母、数字、汉字或下划线的字符
\s 匹配任意的空白符,如空格、换行符、制表符等
\S 匹配任意不是空白符的字符
.(点号) 匹配除了换行符以外的任意字符
[…] 匹配方括号中的所有字符
[^…] 匹配非方括号中的所有字符
举例1:
var str="020-1234567";
//定义正则表达式
var myregex = /0\d{2}-\d{8}/;
//判断字符串str是否匹配正则表达式myregex
if(myregex.test(str))
{
alert("匹配");
}
else
{
alert("不匹配");
}
连接符
一、连接符简介
学习了正则表达式常用元字符,我们知道要想匹配数字,正则表达式就要这样写:
[0123456789]
[0-9]
其中[]表示匹配方括号内的任一字符。在正则表达式中,匹配数字或者英文字母的书写非常不方便。因此,正则表达式引入了连接符“-”来定义字符的范围。
限定符
一、什么叫限定符?
限定符,就是限定某个或某类字符出现的次数。例如,邮政编码都是6位数,因此对于表单中的邮政编码,我们在正则表达式中要限定其为6位数字。匹配邮政编码的正则表达式是“\d{6}”,其中“{6}”就是限定符。
限定符 说明
+ 重复1次或更多次
* 重复0次或更多次(任意次数)
? 重复0次或1次(最多1次)
{n} 重复n次
{n,} 重复n次或更多次(最少n次)
{n,m} 重复n到m次
二、常用的限定符
1、+
在正则表达式中,使用+限定前导字符重复1次或更多次。
举例:
go+
分析:
由于使用了+限定符,因此字母o必须出现1次或者更多次。所以匹配上面正则表达式的字符串有go、good、god等,但是get、g就不匹配了。
2、*
在正则表达式中,使用*限定前导字符重复0次或更多次。
举例:go*
分析:
由于使用了 * 限定符,因此字母o必须出现0次或者更多次。所以匹配上面正则表达式的字符串有g、go、good、god等,但是get等就不匹配了。注意一下,在这里字符串g是匹配的,*限定符跟+限定符不一样,因为+限定符限定前导字符必须出现1次以上。
对于这些正则表达式的学习,请使用正则表达式测试工具进行验证,那是最明显直观的了。
3、?
在正则表达式中,使用?限定前导字符重复0次或1次(最多1次)。
举例:go?
分析:
由于使用了?限定符,因此字母o必须出现0次或者1次。所以匹配上面正则表达式的字符串只有g、go这2种,其他的诸如god、good、get等就不匹配了。
我们都知道“颜色”的英文是color或者colour,这个时候我们可以使用?限定符。
colour?r
表达式u?表示字母u可以出现一次或者不出现
4、{n}
在正则表达式中,使用{n}限定前导字符重复n次。
举例:go{3}
分析:
由于使用了?限定符,因此字母o必须出现3次。所以匹配上面正则表达式的字符串只有gooo这1种,其他的诸如god、good、get等就不匹配了。
5、{n,}
在正则表达式中,使用{n,}限定前导字符重复n次或更多次。
举例:go{3,}
分析:
由于使用了?限定符,因此字母o必须出现3次或更多次。所以匹配上面正则表达式的字符串只有gooo,goooo,gooooo……。
6、{n,m}
在正则表达式中,使用{n,m}限定前导字符重复n到m次(也就是n~m之间任意一个次数)。
举例:go{1,3}
分析:
由于使用了?限定符,因此字母o必须出现1~3次。所以匹配上面正则表达式的字符串只有go、goo、gooo这3种。
定位符
某些字母出现的位置
二、常用定位符
1、^
在正则表达式中,使用^定位符来限定开始位置的字符。
分析:
上尖号的使用有2种情况:(1)定位符;(2)[^…]元字符。
很多初学者容易混淆上尖号,其实大家可以这样理解:上尖号,只有一种特殊情况,就是[^…]这种元字符的时候,上尖号才表示“非”,其他情况,上尖号都是表示定位符。
#####2、$
$用来限定结尾位置的字符
在正则表达式中,使用$定位符来限定一个单词开始或结束时的字符。
使用了$,字符串必须以a结尾。
3、\b
\b包含了字与空格间的位置,以及目标字符串的开始和结束位置等。
举例1:
er\b
分析:
“er\b”匹配“order to”中的er,但不匹配“verb”中的“er”。
举例2:
\ba[a-z]{7}\b
分析:
上面正则表达式匹配以字母“a”开头的长度等于8的任意单词。因此\b限定了单词的开头和结尾。
使用2个\b来匹配一个单词,这是very very 常用的方法。如果大家以后见到正则表达式中有2个\b,也应该知道这是匹配单词的。
4、\B
在正则表达式中,使用\B定位符来限定一个非单词开始或结束时的字符。
举例:
er\B
分析:
“er\B”匹配“verb”中的“er”,但不匹配“order”中的“er”。
\B用得比较少,而\b用得更多一些,因为往往都是\b来匹配一个单词什么,也很好用。
转义字符
例如要匹配字面意义的“\”,就需要使用“\\”表示。
需要转义的字符有:$ (、) * + . [、] ? \ / ^ {、} |。
分组符
在正则表达式中,分组又称为子表达式,即把一个正则表达式的全部或部分分成一个或多个组。其中,分组使用的字符为“(”和“)”,即左圆括号和右圆括号。分组之后,用小括号括起来的表达式看出一个整体来处理。
举例:
/(abc){2}/
/[abc]{2}/
/(a[h-n]){2}/
分析:
第一个正则表达式:
① 使用()把abc分为一组;
② {2}表示把(abc)这一组重复2次;
因此,这个正则表达式匹配的是必须包含abcabc的字符串。
第二个正则表达式:
① [abc]表示匹配a、b、c中任意一个字符;
② {2}表示把[abc]重复2次;
因此,这个正则表达式匹配的字符是ab、dac、cfbchj等中含有a、b、c中任意两个字符组合(比如ab、bc、ac)的字符串。
第三个正则表达式:
① [h-n]表示匹配字母h~n中任意字母;
② 使用小括号()把a[h-n]分成一组;
③ 然后使用限定符{2}使得该组必须重复2次
因此,正则表达式匹配的字符有:aiai、ajaj123这一类。
对于正则表达式中的分组,用一句话理解,就是把某几个字符当做一个整理来处理。
选择符
在正则表达式中,选择符是“|”,用于选择匹配2个选项之中的任意一个,类似JavaScript中的“或”运算。
例如,“abc|def1”匹配的是“abc”或“def1”,而不是“abc1”或“def1”。如果要匹配“abc1”或“def1”,应该使用分组符,即“(abcd|efgh)1”。
在编写正则表达式时,我们也可以在一些关键代码旁做一下注释,这样做的好处很多,比如:方便理解、方便检查或方便项目组里的其它程序员了解你的代码,而且可以方便以后你对自己代码进行修改。
语法:
(?#注释的内容)
说明:
如果要在正则表达式中包含注释,则最好打开“忽略模式里的空白符”选项。因此,此时可以在注释中添加空格、换行符号、制表符号等。一旦启用了该选项,即符号#之后的内容会全部被忽略掉。
这种注释方式暂时并未被JavaScript支持,但是其他高级语言可能使用到。对于学习前端的同学,可以忽略这个知识点。
优先级顺序
运算符或表达式 说明
\ 转义符
()、(?:)、(?=)、[] 圆括号或方括号
*、+、?、{n}、{n,}、{n,m} 限定符
^、$、\b、\B 位置和顺序
上面优先级是从高到低排列。
正则表达式总结:
常用元字符
元字符 说明
\d 匹配数字,相当于[0-9]
\D 匹配非数字,相当于[^0-9]
\w 匹配字母或数字或汉字或下划线
\W 匹配任意不是字母、数字、汉字或下划线的字符
\s 匹配任意的空白符,如空格、换行符、制表符等
\S 匹配任意不是空白符的字符
.(点号) 匹配除了换行符以外的任意字符
[…] 匹配方括号中的所有字符
[^…] 匹配非方括号中的所有字符
限定符 说明
+ 重复1次或更多次
* 重复0次或更多次(任意次数)
? 重复0次或1次(最多1次)
{n} 重复n次
{n,} 重复n次或更多次(最少n次)
{n,m} 重复n到m次
定位符 说明
^ 限定开始位置的字符
$ 限定结尾位置的字符
\b 限定单词(字)边界的字符
\B 限定非单词(字)边界的字符