正则表达式

22 篇文章 0 订阅
一、正则表达式的定义方法

在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 限定非单词(字)边界的字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值