javaScript--正则表达式

来源:互联网 发布:数据可靠性测试 编辑:程序博客网 时间:2024/06/16 23:41

一、什么是正则表达式?

正则表达式(Regular Expression):由一些普通字符和特殊字符组成的,用以描述一种特定的字符规则的表达式。

功能? 正则表达式常用于在一段文本中搜索、匹配或替换特定形式的文本。如:词语出现频率统计、验证邮箱格式、手机号码格式、屏蔽一篇帖子中的限制性词语等。其中:正则最常用于邮箱格式验证或者账户名密码的验证


例如下面的某个网站的新用户注册页面就是用到正则表达式


二、何时使用正则表达式?

1. 按规则,模式匹配多个关键词——检索
        2. 按规则,检查一个字符串的格式——验证


三、正则表达式的格式(用"/正则表达式/"来表示一个正则表达式)

(1).最简单的正则表达式就是字符原文

例如 var a=/regexp/;   //正则表达式

var b="regexp";//一段字符串

console.log(a.test(b));  //true//与原文相同,输出true

(2).字符集:规定一个字符可用的备选字符列表

何时使用字符集? 如果关键词的某一位字符有多重备选时

如何使用?   用一个 [] 括起来  [备选字符列表]

强调 :一个字符集[] ,只能且必须匹配一位字符

简写: 如果字符集中的字符部分连续,可用“-”省略中间的字符


比如:

数字的范围是0,1,2,3,4,5,6,7,8,9  可以简写成0-9 ,用字符集表示为[0-9],意思是格式必须是一位数字,范围在0-9之间

例如: var  a=/[0-9]/ ;   //正则表达式

            var  b=2; //数字2

            console.log(a.test(b));  //true,   因为2在字符集[0-9]之间,所以返回true


再例如: var a=/[0-9]/;  //正则表达式

var b ="2a";//字符串2a

console.log(a.test(b));  //false,   因为字符集只能匹配一位字符,所以,2虽然在字符集[0-9]之间,但是a不是

一位数字,不在字符集[0-9]之间,虽然匹配失败,返回false


按照上面的方式,可以总结出如下格式:


1.一位数字:[0-9]

2.一位小写字母:[a-z]

3,一位大写字母:[A-Z]

4.一位字母:[A-Za-z] (大小写都行)

5.一位汉字: [\u4e00-\u9fa5]


还有一种写法,“除了....”  ,用^表示

例如:[^4] ,意思是除了4之外都行

var a =/[^4]/;   //正则表达式

 var b=12356789;  //数字12356789

console.log(a.test(b));   //返回true, 数字中没有4

var c=1234;

console.log(a.test(c));   //返回false ,  数字中发现了4


(3).预定义字符集:对常用字符集的最简化写法

一位数字: \d (普通字符集写法是:[0-9])

一位字母,数字,或者下划线 : \w (用普通字符集写法是:[A-Za-z0-9_])

一位空字符:\s (包括空格,换行)


强调: 只有在规则完全匹配时,才使用预定义字符集
             只要有一点不匹配,都要手动编写普通字符集



(4).量词:规定一个字符集出现次数的规则

何时: 只要规定一个字符集出现的次数
强调: 两次都要在字符集之后
有明确边界(用一个{}表示):
         字符集{n,m} 至少n个,最多m个
         字符集{n,}  至少n个,多了不限
字符集{n}   必须n个
没有明确边界: 
         字符集?     可有可无,最多1个
         字符集+     至少一个,多了不限
         字符集*     可有可无,多了不限——不限制个数


例1: 

var a = /\d{3,5}/;   //正则表达式:数字至少3个,最多5个

var b= 123;   //3位数字

var c= 1234;   //4位数字

var d= 12345;  //5位数字

var e = 123456;  //6位数字

console.log(a,test(b));    //true   ,3位数字符合

console.log(a,test(c));    //true   ,4位数字符合

console.log(a,test(d));    //true   ,5位数字符合

console.log(a,test(e));    //false   ,6位数字不符合


例2:

var a = /\d\w?/;   //正则表达式:一位数字,一位字母或数字或下划线可有可无且最多一个

var b = 2aa_;

var c = 3a;

var d = 4;

var e = 5_;

console.log(a.test(b)); //false, 2aa_不符合只有一个的要求

console.log(a.test(c)); //true, 符合一个数字,一位字母数字下划线最多一个的要求

console.log(a.test(d)); //true, 符合一个数字,一位字母数字下划线可有可无的要求

console.log(a.test(e)); //true, 符合一个数字,一位字母数字下划线最多一个的要求


(5).选择和分组

分组: ()将多个字符集包裹为一组
为什么: 量词默认仅修饰相邻的前一个字符集
何时: 希望量词同时修饰多个字符集时,就要用()将多个字符集分为一组,用量词修饰分组。
选择: 或者  规则1|规则2 只要满足任意一个规则即可


例如:

var a = /(我|卧)(草|操|艹|槽)/; //正则表达式:共8种组合

var b= “我草”;

var c = “我操”;

var d= “我艹”;

var e= “我槽”;

var f =“卧草”;

var g =“卧操”;

var h ="卧艹";

var i =“卧槽”;

var j ="我曹";

var k ="窝操";

console.log(a.test(b));//true

console.log(a.test(c));//true

console.log(a.test(d));//true

console.log(a.test(e));//true

console.log(a.test(f));//true

console.log(a.test(g));//true

console.log(a.test(h));//true

console.log(a.test(i));//true

console.log(a.test(j));/false

console.log(a.test(k));//false


(6).指定匹配位置

^ 字符串开头: 比如: 开头的空字符: ^\s+
       何时: 仅匹配开头位置的xxx
$ 字符串结尾: 比如: 结尾的空字符: \s+$
       何时: 仅匹配结尾位置的xxx
         同时匹配开头或结尾的空字符: ^\s+|\s+$
 \b 单词边界: 字符串开头 字符串结尾 空字符 标点...
       何时: 匹配单个单词时


例1:

var a = /^[0-9]\w/;  //正则表达式: 开头是一个数字,然后是一个数字或字母或下划线

var b = 2a;

var c = a2;

console.log(a.test(b));  //true,  开头是数字

console.log(a.test(c));  //false,   开头不是数字

例2:

var a = /\w[0-9]$/;  //正则表达式: 一个数字或字母或下划线,然后结尾是一个数字

var b = 2a;

var c = a2;

console.log(a.test(b));  /false,  结尾不是数字

console.log(a.test(c));  //true,   结尾是数字


例3:

var a = /^\d{2,5}A-Za-z$/; //正则表达式: 开头是一个数字,至少2个,最多5个,结尾是一个字母,大小写都行

var b= 123a;

var c= A123;

console.log(a.test(b)); //true

console.log(a.test(c)); //false

四、正则表达式常用举例

例1:

邮箱格式的验证

邮箱格式一般例如:  123456@qq.com, 123456@163.com, 123456@126.com............

那使用JS的正则表达式该如何表达呢?

     首先分为三个部分:

1.@前面的部分

2.@

3.@后面的部分


@前面的部分一般是:有数字,有字母,有下划线,至少要有一个,多了不限,可以表示为 => \w+

@后面的部分一般是:数字字母下划线,至少要有一个,多了不限然后一个 "." 紧跟com, cn , net , com.cn,可以表示为 =>  \w+.(com|cn|net|com.cn)


结合起来:/^\w+@/w+.(com|cn|net|com.cn)$/


var  a= /^\w+@/w+.(com|cn|net|com.cn)$/;

var  b= abc123456@163.com

var c = abc_qwe123@126.com.cn

console.log(a.test(b));   //true

console.log(a.test(c));   //true


例2:

手机格式验证(以中国号码为例)

手机格式一般例如:+86 13800000000,0086 18400000000...... 

开头是+86或者0086也可以不加,然后跟一个空格或者没有空格都行  => (\+86|0086)?\s*  ,其中+号要用转义字符\+, 否则系统会报错

然后是数字1 => 1

第二个数字是3,4,5,7,8其中一个   => [34578]

然后跟9位数字  =>  \d {9}


结合起来: /^(\+86|0086)\s*1[34578]\d{9}$/


var  a =/^(\+86|0086)\s*1[34578]\d{9}$/;

var  b= +8613400000000;

var c= +86  13400000000

var  d= 13400000000

console.log(a.test(b));   //true

console.log(a.test(c));   //true

console.log(a.test(d));   //true


总结:

正则表达式是js中非常基础且很重要的内容,在许多地方都会用到,一定要多练习~~~~

转载请说明出处,谢谢!

 

0 0
原创粉丝点击