正则表达式
2019-08-03 15:35 张海峰999 阅读(211) 评论(0) 编辑 收藏 举报1.
字符集* , 字符集? , 字符集+
eg:abc*d 匹配abcd abccd abccccd 等, *代表前面字符可以不出现,也可以出现一次或多次(0次,1次,多次)
abc?d 匹配abd abcd ?代表前面字符最只出现一次或0次(0次,1次)
abc+d 匹配abcd abccd abcccd等 +代表前面的字符至少出现一次(1次,多次)
2.
[0-9] 0,1,2,3,4,5,6,7,8,9
[a-z] 匹配小写英文字母
[A-Z] 匹配大写英文字母
[0-9a-zA-Z] 匹配以上三种情况
[\u4e00-\u9fa5] 匹配汉字
3.
\d 匹配以为数字 ===>> [0-9]
\w 匹配以为数字,字母或_
\s 匹配任何空白字符,包括空格、制表符、换页符等等
. 匹配所有的字符
4.量词
{n} n为非负整数,匹配前面的字符n次 abc{2} ===> abcc
{n,} n为非负整数,匹配前面的字符至少出现n次 abc{3,} ===>>abccc
{n.m} n,m均为非负整数n<=m 匹配前面的字符至少出现n次至多出现m次 abc{2,4} =>>>abcc abccc abcccc
5.特殊字符
^ 匹配输入字符串的开始位置 ===>>>[^abc] 匹配除abc以外的字符
$ 匹配输入字符串的结束位置
\ 将下一个字符 匹配 成为一个特殊字符或原义字符
| =>>> x|y 匹配x或y
常用正则
qq号码[1-9]\d{4,11}
qq邮箱 [1-9]\d{4,11} @[q][q].(com|cn)
网易邮箱 [a-zA-Z1-9]@[1][6][3].(com|cn)
邮政编码 [1-9][0-9]{5}
身份证号 [1-9]\d{5}((18|19)\d{2}|([2][0][0-1][0-9]))((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]
手机号码 (\+86|0086)?\s*1[3456789]\d{9}
密码 [A-Z][a-z0-9A-Z]{5,17}首字母大写
切割
将原字符串按照指定字符分隔成多个子字符串
var arr = str.split(/正则/)
切割后的多个子字符串组成的数组,结果中不再包含分隔符
将字符串打伞成字符串数组 var char = pid.split("")
var pid = "5654655644";
var chars = pid.split("");
console.log(chars);
var mail = "888888888@qq.com";
var arr = mail.split(/@/);
console.log(arr); "888888888" "qq.com"
var qqnumber = arr[0];
var server = arr[1];
console.log(qqnumber,server)
替换
将字符串中所有敏感词替换成新的内容,无权修改原字符串,必须用变量接住替换过的新字符串
var str = str.replace(/正则表达式/ig,"替换值")
var str = "a a b b c c d d ";
str = str.replace(/a/gi, "aa");
console.log(str); 结果(aa,aa,b,b,c,c,d,d)
根据不同的关键词动态替换不同的值
str = str.repalce(/正则表达式/gi,function(kw){
kw本次找到的关键词
return 根据kw计算出新的替换词
})
var str = "今天真特么热,热得快炸了,你开空调啊,开个锤子的空调";
str = str.replace(/[特么锤子]/g,
kw=>kw.length==2?"*":"*")
//function(kw){return kw.length==2?"*":"*"}
console.log(str);
判断字符串中是否包含了符合规范的敏感词
返回值:找到的关键词的下标,如果找不到返回-1
var str = str.search(/正则/)
使用正则表达式查找指定一类关键词的内容
var arr = str.match(/正则/ig)
没找返回null
RegExp 正则的API 查找和验证
var reg = /正则/ig; 正则是固定不变的
var str = "a b a c , d b d c";
var reg = /a/g;
/双斜杠中写的内容遵的是正则的语法,因此想要用/需加上\作为转移符/
var arr = str.match(reg);
console.log(arr);
var reg2 = /a/g;
console.log(reg == reg2);//false 两个引用类型地址不可能一样
var msg = "你知道伤心总是难免的,又何苦一往情深";
var names =["伤心","一往情深"];
//动态生成正则表达式
var regs = new RegExp(names.join("|"),"g");
var arr1 = msg.match(regs);
console.log(arr1);
// 返回值:切割后的多个子字符串组成的数组,结果中不存在包含分隔符