1. 定义正则两种方式
1. var reObj1 = new RegExp(“^[a-zA-Z][a-zA-Z0-9]{5,11}$”);
2. var reObj2 = /^[a-zA-Z][a-zA-Z0-9]{5,11}$/
2. 常用方法
reObj1.test(“将要被校验的字符串”)
3. 正则的匹配模式
1. g –> 全局
”Alexdashabi”.replace(/a/g, “呵呵”)
2. i –> 不区分大小写
”Alexdashabi”.replace(/a/i, “呵呵”)
// RegExp对象 ---> Python re模块 // 生成RegExp对象 var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$"); var regexpRet1 = reg1.test("xiaoqiang"); console.log(regexpRet1); // true var regexpRet2 = reg1.test("1xiaoqiang"); console.log(regexpRet2); // false console.log(/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test("xiaoqiang")); //{5,11}不能加空格,否则出现不可预料的错误 true console.log(/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test("1xiaoqiang")); // flase
注意点:
1.正则表达式中间一定不可以有空格
2.test()不传值相当于传了一个undefined进去,然后test()就把这个undefined当成是“undefined”来判断
3.JS正则的两种模式1. g表示全局 2. i忽略大小写
var ss = "Alexdashabi"; // 不是改变默认的字符串,而是生成了一个新的字符串 var s3 = ss.replace(/a/gi, "哈哈哈") console.log(s3); // 哈哈哈lexd哈哈哈sh哈哈哈bi
4.当正则表达式使用了全局模式(g)的时候,并且你还让它去检测一个字符串,此时会引出来一个
lastIndex, lastIndex会记住上一次匹配成功的位置,并把下一次要开始校验的位置记住
var r = /alex/g; console.log(r.test("alex")); // true console.log(r.lastIndex); // 打印出4, lastIndex(0-3) console.log(r.test("alex")); // false ,因为是从lastIndex=4开始校验的 console.log(r.lastIndex); // 打印出0, lastIndex(0-3) console.log(r.test("alex")); //true 同理 console.log(r.lastIndex); console.log(r.test("alex")); // false
如何避免,解决方法是不需要用全局g;
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/18168.html