JavaScript正则需要注意的地方

栏目: JavaScript · 发布时间: 6年前

exec()和match()区别

  • 当采用非全局匹配的时候,两个方法的返回值完全一样。

  • match和exec都只匹配一次,且都会把分组抽出来放到数组后面

(function(){
        
        let str="antzoane";
        let reg=/(a)(n)/;
        console.log(str.match(reg));
        console.log(reg.exec(str));
    })();

JavaScript正则需要注意的地方

  • 当为全局匹配的时候,match方法返回一个存放所有匹配内容的数组(无视子表达式的匹配)。

  • exex方法返回数组不会存储所有的匹配,仅存储第一个匹配到的内容(存储在数字第一个元素),第二个元素存储第一个子表达式匹配到的内容,第三个元素存储第二个子表达式匹配到的内容,以此类推

(function(){
       
        let str="antzoane";
        let reg=/a(n)/g;
        console.log(str.match(reg));
        console.log(reg.exec(str));
        //再次调用从上次的lastindex开始匹配;
        console.log(reg.exec(str));
    })();

JavaScript正则需要注意的地方

match()和分组匹配

var reg = /(\d{4})-(\d{2})-(\d{2})/;
    var dateStr = '2018-04-18';
    var s=dateStr.match(reg);
    console.log(s)//arr[0]是匹配的结果,arr[1]是第一个()里的匹配内容,全局匹配不会返回()里的内容

    var str="hello my name is ben   ,this is  ";
    var reg2=/ {1,}/g;
    var reg22=/( ){1,}/g//()内看成一个整体去匹配
    console.log(str.match(reg2));
    console.log(str.match(reg22));

JavaScript正则需要注意的地方

replace()和分组捕获

全部匹配添加修饰

var str="0816-2323263";
    var reg=/(\d+)(-)(\d+)/g;
    var str2=str.replace(reg,"($1)-$3");//全部匹配添加修饰
    console.log(str2);//(0816)-2323263

(?<name>)与(?:exp)

var str1="123478basd-12aaaaa";
    var reg1=/(\d+)([a-z]+)(\d+)(?<rename>[a-z]+)/g;
    var str21=str1.replace(reg1,"$1hhhhh$<rename>");//(?<name>)捕获文本到名称为name的组里  (?:exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号
    console.log(str21);//123478basd-12aaaaa

匹配需要删除的部分然后置空

var str23="123478basd12asdsa";
    var reg2=/[a-z]+/g;
    var str22=str23.replace(reg2,"");//匹配需要删除的部分然后置空
    console.log(str22);//12347812

贪婪与懒惰

  • 在量词后面加个问号表示懒惰,尽可能少的匹配

var str="abc8defghij7klngon8qrstwxy7";
    var reg1=/8[a-zA-Z0-9]*7/;
    var reg2=/8[a-zA-Z0-9]*?7/;
    var reg3=/8[a-zA-Z0-9]+?/;
    var res1=str.match(reg1);
    var res2=str.match(reg2);
    var res3=str.match(reg3);
    console.log(res1);
    console.log(res2);
    console.log(res3);

JavaScript正则需要注意的地方

零宽断言

  • (?=exp)向前查找
  • (?<=exp)向后查找
  • (?!exp)匹配后面跟的不是exp的位置
  • (?<!exp)匹配前面不是exp的位置
(function(){
        var str="http://www.sina.com.cn ";
        var reg1= new RegExp(/.+(:)/g);
        var res1=str.match(reg1);
        var reg2=new RegExp(/.+(?=:)/);
        var res2=str.match(reg2);
        console.log(res1);
        console.log(res2);
    })();

JavaScript正则需要注意的地方

(function(){
        var a = "价格是123456789.6754";
        var reg4= new RegExp(/(\d)(?=(\d{3})+\.)/g);
        console.log(a.match(reg4));
        var b = a.replace(reg4, '$1,');
        console.log(b)
    })();

JavaScript正则需要注意的地方

(function(){
        let str="ABCD01:$23.45";
        let reg1=/\$[0-9.]+/g;
        let reg2=/(?<=\$)[0-9.]+/g;
        let res1=str.match(reg1);
        let res2=str.match(reg2);
        console.log(res1);
        console.log(res2);
    })();

JavaScript正则需要注意的地方

匹配固定位数

  • 匹配固定位数时,不能/[1-9]d{4,11}/这样写,这样输入15位也会从15位中成功匹配11位
  • 只能用^和$匹配字符串开始和结束位置,然后再匹配中间的位数(^$不是从哪里开始匹配
function check(val) {
        console.log(val)
        var reg = /^[1-9]\d{4,8}[0-9]$/;//匹配5到10位qq号
        if (!reg.test(val)) {
            alert("输入有误");
        }else{
            alert("输入正确");
        }
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

微信小程序运营与推广完全自学手册

微信小程序运营与推广完全自学手册

王洪波 / 电子工业出版社 / 2018-6 / 59

本书是运营管理方面的书籍,将小程序的运营推广问题置千小程序的整个运营管理体系中来谈,主要讲述小程序的定位规划、营销吸粉策略、评估优化这三大方面的内容,这三方面的内容之间是三位一体、密切相关的。 书中通过列举丰富且具有代表性的小程序实际案例来向读者提供些可行的运营推广办法。案例涉及美食类、电商类、旅游类、媒体类等小程序,可供多个行业的小程序运营者参考借鉴。 书中所提供的各种小程序营销策略......一起来看看 《微信小程序运营与推广完全自学手册》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具