Javascript正则
正则的定义
字符出现的规律的一种规则!
正则的作用
验证和查找
创建正则
1、var reg=/输入正则规则/; 注意:/ /内部是正则的天下,不支持js语法!
2、var reg=ner RegExp(); //了解即可,不需要强记!
正则的语法
1、关键词的原文就是最简单的正则
2、字符集:一个字符可能出现的备选字符的集合
eg::政[治法协]匹配:政治 政法 政协
常见字符集:如果备选字符的Unicode编码是连续的,可以省略中间的字符,用“-”链接
eg:[0123456789]<=>0-9 [abcdefg]<=>[a-g]
预定字符集:预先已经规定好的字符集
eg:\w:一个字母数字下划线 \d一个数字[0-9]
\s空格,制表符
.任意字符
^除了xxx
量词:修饰一个字符集出现的次数!
1、有明确的数量要求或者范围
字符集{m,n} m:表示字符集出现的最小次数! n:表示字符集出现的最大次数!
字符集{m}:至少出现m次,至多不限!
字符集{m}:只能必须是m次
2、没有明确的数量要求
字符集?:可有可无,至多一次。等价于{0,1}
字符集+:至多一次,多了不限。等价于{1,}
字符集*:可有可无,次数不限。等价于{0,}
注意:如果正则规则中有特殊含义的字符,可以使用转义字符"\"
选择和分组
1、选择:在多个规则之间任选其一都可以匹配!
操作:规则1|规则2:只要有一个规则适用即可!
2、分组:将多个规则分为一组,由一个量词修饰!
操作:()eg:(+86 10086)? eg:(微/w(ei)?) (信/x(in)?)
匹配指定位置
1、开头:^ ^\s以空格开头
2、结尾:$ \s$以空格结尾
eg:^\d{6}:以六位数字开头
\d{6}$:以六位数字结尾
^\d{6}$:字符串只能是六位数字组成
3、单词边界:\b
eg:no\b 匹配以no结尾的单词
\bno 匹配以no开头的单词
\bno\b 匹配完整的单词no
案例:
1、身份证 340881199812120827
18位身份证号码的验证规则:^(\d{17}[0-9xX])$
或15位数字+2位数字+一位数字或者X或者x:^\d{15}(\d{2}[0-9Xx])?$
2、手机号: 6085255 解析:0086|+86 空格 | 6085255 9位数
9位数号码的验证规则:^(0086|86)?\s*|[6085255]\d[{9}$
字符串的API
1、查找敏感词
0.查找关键词的下标----固定的敏感词
var i=str.indexOf("关键词",starti);
从starti位置开始向后找最近的一个关键词的下标,找到就返回其下标,找不到返回-1。
1.判断是否包含敏感词----模糊查找
str.search(/正则/);
//找第一个关键词的下标,找到就返回其下标,找不到返回-1。
2.查找所有敏感词内容----返回数组内容
str.match(/正则/g);
问题:1>默认正则只要匹配到一个关键词就下标了!
解决:在正则的第二个/后g global
2>正则默认区分大小写
解决:在正则的第二个/后加i ignore
3.既查找敏感词内容又查找敏感词位置----正则对象
reg.exec();----正则对象中的
2、替换:将符合要求的关键词替换为指定内容
1.简单替换
str.replace(/正则/g,"需要替换的新值");
注意:此处替换的新值是固定的!
2.高级替换
function kws (key) {
key.length==2?return"**":
key.length==3?return"***":
return"*"
}
str.replace(/正则/g,kws);
注意:replace方法每找到一个关键词,会调用一次回调函数,将关键词传入,由回调函数替代的值!
3、切割:split 将字符串按指定的关键词切割为多个子字符串,放在一个数组返回!
1.简单切割:var arr=str.split("切割符");
2.复杂切割:var arr=str.aplit(/正则/);
常用套路:var arr=str.aplit(" ");
相反操作:var str=arr.join(" ");
正则对象
1、RegExp对象:封装了一条正则规则,提供了操作正则验证、或查找API的一类对象!
2、创建正则对象:
1.直接量:var reg=/正则/ig;
问题:此方法正则一旦建立,无法通过Js直接修改
2.用new
var reg=new RegExp("正则","ig");
优点:正则是字符串形式,可以使用js语法!
RegExp的API
1、验证字符串格式
var bool=reg.test(str);
验证字符串是否符合正则规则,返回bool
可以直接当作判断条件
验证必需前加^后加$
2、既查找关键词内容又查找关键词位置
reg.exec(str);
查找str中下一个关键词的位置和内容,返回一个数组
0:关键词的内容 index:关键词的位置
注意:默认第一次查找从0号位置开始;以后每执行一次,都从上一次结束的位置之后***开始;找不到就返回null。
完结!