js的正则对象

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;

 

posted @ 2018-12-14 16:38  大西瓜Paul  阅读(1571)  评论(0编辑  收藏  举报
/*增加返回顶部按钮*/ 返回顶部 /*给标题增加蓝色背景长条*/