一、正则表达式
定义字符串中字符出现规整的表达式;使用:切割、替换、验证。
1、创建正则对象:
直接量方式:var reg=/正则表达式/后缀(g(代表全部)i(代表忽略大小写))
构造函数方式:var reg=new RegExp("正则表达式","后缀")
2、正则表达式:
例如替换:(关键字,替换内容),这种方式只能替换原文中的第一个,替换搭配上正则:str.replace(/关键字/ig),则会把原文中该关键字全部替换掉。
3、备选字符集:/[备选字符集]/;
它一个中括号只能管一位字符,可以自定义用户输入内容的范围;但是如果第一位符合了,则后续怎么输入都会正确;快捷方法:
一位数字:[0-9]
一位字母:[A-Za-z]
一位字母、数字、下划线:[A-Za-z0-9_]
一位汉字:[\u4e00-\u9fa5]
除xx之外:[^xx],表示除xx之外其他都可以用
var user=prompt("输入身份证"),
//该正则表达式表示输入的身份证可以是15位的
//也可以是17位加一位0到9的数字或者字母Xx的,如果不符合,正则判断flase
reg1=/^(\d{15}|\d{17}[0-9xX])$/;
console.log(reg1.test(user))
4、预定义字符集:
前辈们创建好的,简化备选字符集写法
\d:(一位数字0-9);\w:(一个字符,可以是字母,可以是数字,可以是下划线)
\s:(一个字符,可以是空格,制表符、换行);\.(一个字符,除了换行都可以)
5、量词:规定一个字符集出现的次数
1、有明确数量:字符集{至少n次,最多n次};字符集{至少n次,"空着不写,表示多了不限"}
字符集{固定必须多少次}
2、没有明确数量:字符集?:前边相邻的字符集可有可无,最多一次
字符集*:前边相邻的字符集,可有可无,无限次
字符集+:前边相邻的字符集,至少一次,多了不限
var user=prompt('输入手机号'),
//表示+86和0086可以出现,但是只能出现1个
//\s*表示可以出现空格等,多了不限制
reg1=/^(\+86|0086)?\s*[1][3-9]\d{9}$/;
console.log(reg1.test(user))
6、选择和分组:
选择和分组基本上都是同时出现的选择 | 分组()
选择:在多个规则中多选一,规则1|规则2|规则3
分组:(规则1|规则2|规则3)
7、指定匹配位置:
^:开头;$:结尾;两者同时使用就表示从头到尾完全匹配
8、预判公式:多半出现在验证上面,不能输入某些或某些组合的字符,可以多个
(?![0-9]+$):不能是纯数字组成
(?![A-Z]+$) : 不能全由大写字母组成
(?![0-9a-z]+$) : 不能全由数字组成,不能全由小写组成,也不能全由数字和小写的组合组成
二、正则的API
1、切割: var new=str.split(切割符或者正则)
2、替换:var new=str.replace(/关键字/g,新内容)
var str="17666666666";
newstr=str.replace(/^(\d{3})(\d{5})(\d{3})$/,function(a,b,c,d,e,g){
console.log(a)//匹配到的内容,这里全部匹配到,就相当于原文
console.log(b)//第一个分组的内容
console.log(c)//第二个分组的内容
console.log(d)//第三个分组的内容
console.log(e)//关键字的下标
console.log(g)//原文
return b+"****"+d//返回的是第一个分组的内容加*号,加第三个分组的内容
//就将第二个分组的内容给替换掉了
})
三、正则的方法
验证:var bool=reg.test(str); - 得到一个布尔值,然后我们根据布尔值设置不同的样式,不同的样式决定了你能不能提交