js正则表达式

158 阅读2分钟

引用类型之正则表达式

  • 字面量格式:var expression=/pattern/flag

pattern: 可以为复杂的正则表达式 ,flag有三种匹配方式: g,i,m

global : 全局模式,对字符串从头到尾匹配,不会匹配到第一个就结束。

case-insenstive : 匹配时不分大小写

multiline : 多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。

    var regex=/[a,b]c/g;
    var str="acdddbc";
    var r=regex.test(str);
    console.log(r);
    //打印结果
    true
    var regex=/ac/i;
    var str="Acdddbc";
    var r=regex.test(str);
    console.log(r);
    //打印结果
    true
    var regex=/ac/m;
    var str="dddbc\ndac";
    console.log("\n会使字符串换行:"+str);
    var r=regex.test(str);
    console.log(r);
    //打印结果
    会使字符串换行:dddbc
    dac
    true
  • 以new的方式创建正则表达式:new RegExp(pattern,mode),其中pattern为正则表达式字符串,mode为匹配模式:g,i,m.
    var reg1 = /\[bc\]at/;
    var reg2 = new RegExp("\\[bc\\]at");
    var str1 = "[bc]atb";
    console.log("reg1:"+reg1.test(str1));
    console.log("reg2:"+reg2.test(str1));
    //打印结果
    reg1:true
    reg2:true

注意:pattern字符串,在某些情况下对字符需要进行双重转义,一般认为需将"\"转换成"\\"

  • regExp的实例属性

实例分为:global,ignoreCase,mutiline,lastIndex,source.

    var reg2 = new RegExp("\\[bc\\]at","g");
    //返回布尔值
    console.log("global:"+reg2.global);
    console.log("gnoreCase:"+reg2.ignoreCase);
    console.log("multiline:"+reg2.multiline);
    //返回正则表达式
    console.log("source:"+reg2.source);
    //打印结果
    global:true
    gnoreCase:false
    multiline:false
    source:\[bc\]at
    
  • exec方法:regExp.exec(pattern) pattern(正则表达式)里面用括号括起来的部分为一个分组
    var reg = /^(18|19)\d+/;
    var reg1 = /^(18|19)(\d+)/;
    var str1="1819";
    console.log("\\d+未加括号:");
    console.log(reg.exec(str1));
    console.log("\\d+加括号:");
    console.log(reg1.exec(str1));
    //打印结果
    \d+未加括号:
    [ '1819', '18', index: 0, input: '1819', groups: undefined ]
    \d+加括号:
    [ '1819', '18', '19', index: 0, input: '1819', groups: undefined ]

regExp.exec(pattern)返回的数组arr,arr[0]为整个正则表达式匹配到的字符串,而arr[1]~arr[n]为各个括号括起来的分组所匹配到的 字符串,input为要匹配到字符串。

    var reg1 = /^(18|19)(\d+)/;
    var str1="1819";
    var arr=reg1.exec(str1);
    console.log("arr[0]: "+arr[0]);
    console.log("arr[0]: "+arr[1]);
    console.log("arr.input: "+arr.input);
    //打印结果
    arr[0]: 1819
    arr[0]: 18
    arr.input: 1819

注意:str匹配regEXP,?取值是0个或者1个由str决定,当str1个时就取值1个.