正则

作者: 指尖轻敲 | 来源:发表于2018-11-20 21:21 被阅读6次

    创建正则表达式

    1. 构造函数创建
    var parrent1 = new RegExp("box");
    var parrent2 = new RegExp("box", "gi");
    

    第一个参数是匹配文本的规则;第二个参数(可选)是模式修饰符。i表示忽略大小写,g表示全局匹配。ES6新增的暂时不说

    1. 字面量创建
    var parrent3 = /box/;
    var parrent4 = /box/gi;
    

    语法:/模式/模式修饰符

    RegExp实例方法

    var str = "this is a Box box box";
    var parrent = new RegExp("box", "gi");
    
    1、test()

    这个方法用来查找字符串中是否存在正则表达式所写的模式规则。有就返回true,没有就返回false。

    console.log(parrent.test(str)); //true
    

    这个方法只要匹配到符合规则的就会返回true,不会继续往下找了,所以这个方法使用全局匹配是没用的。

    2、exec()

    这个方法也是匹配符合规则的字符,如果没有匹配到就返回null,如果匹配到了返回的是一个数组,这个数组第一个元素是在字符串中匹配到的字符,第二个元素是匹配到的字符的起始索引。

    var reg = /xiao/i;
    var str = "wo shi yi zhi xiao xiao niao"
    console.log(reg.exec(str)); 
    //["xiao", index: 14, input: "wo shi yi zhi xiao xiao niao", groups: undefined]
    var reg2 = /da/i
    console.log(reg2.exec(str)); //null
    
    3、compile()

    该方法用于修改正则表达式,也可以修改模式修饰符。也就是把正则表达式匹配的字符和模式替换掉。

    var reg = /xiao/ig;
    var str = "wo shi yi zhi Xiao xiao niao";
    console.log(reg.exec(str)); //["Xiao", index: 14, input: "wo shi yi zhi Xiao xiao niao", groups: undefined]
    var regNew = /wo/i;
    reg.compile(regNew);
    console.log(reg.exec(str)); //["wo", index: 0, input: "wo shi yi zhi Xiao xiao niao", groups: undefined]
    

    补充:在全局匹配的模式下,exec和test方法匹配到第一个字符串的时候,会把它对应的索引存储起来,下一次再检索同一字符串时,会从刚才存储的位置开始检索。最后当检索结果为null时,下一次从头开始。当然如果没有加g进行全局匹配的话,每次都是从头开始查找。

    字符串的模式匹配

    上面是正则的方法,下面是字符串的匹配方法,都可以用来匹配。

    match()

    只接受一个参数,正则表达式或者RegExp对象。(和正则的exec方法一样)。数组第一项是与整个模式匹配的字符串,之后的每一项保存着正则表达式中的捕获组匹配的字符串

    var test = "cat, bat, sat, fat";
    var pattern = /.at/;
    <!--与pattern.exec(test)相同,index表示匹配项在字符串中的位置,input表示应用正则表达式的整个字符串-->
    var result = test.match(pattern); // ["cat", index: 0, input: "cat, bat, sat, fat"]
    
    search()

    参数与match相同,返回字符串中第一个匹配项的索引。如果没有就返回-1。

    var test = "cat, bat, sat, fat";
    var pos = test.search(/at/);
    alert(pos); //1
    
    replace()

    替换字符串,返回值为替换后的字符串,原来的字符串不变。

    如果第一个参数是字符串,则替换的只是第一个匹配项,如果想全部替换就得用正则表达式。

    var str = "cccc";
    console.log(str.replace("c", "老王")); //老王ccc
    console.log(str.replace(/c/g,"老王")); //老王老王老王老王
    

    特殊字符

    特殊字符,顾名思义就是有特殊含义的字符,所以没办法直接匹配,如果要匹配以下字符,需要在前面加一个转义字符 \。

    • $:匹配输入字符的行尾位置(以...结尾)。

    • (xyz):里面放一个子表达式,作为一组整体去匹配。

    • x*:匹配前面的子表达式0或多次x。

    • x+:匹配前面的表达式1次或多次,最少一次。

    • :匹配除换行符之外的任意单字符。

    • [a-z0-9]:匹配中括号表达式中的任何一个。a-z和0-9之间任意一个。

    • x?:匹配前面的子表达式零次或一次x,或指明一个非贪婪限定符。

    • \:标记特殊字符的转义字符

    • ^:匹配输入字符串开始的位置,在中括号使用表示非的意思。

    • x{n}:匹配正好n个x,注意是连续的。

    • x{n,}:匹配最少n个x,连续的。

    • x{n,m}:匹配最少0个最多m个,连续的x。

    • x|y:表示x、y两项之间的一个选择。

    //首字符不能是数字(不能以数字开头)
    var parrent = /^\D/;
    var str = "_cdd";
    console.log(parrent.test(str));
    
    //首字符必须是数字(以数字开头)
    var parrent = /^\d/;
    console.log(parrent.test(str));
    
    //必须以字母结尾
    var parrent = /[a-zA-Z]$/;
    var str = "ss_";
    console.log(parrent.test(str));
    

    非打印字符

    • \f:换页符

    • \n:匹配一个换行符

    • \r:回车符

    • \s:匹配任何空白字符,包括空格、制表符、换页符等[\f\n\r\t\v]

    • \S:匹配任何非空白字符,

    • \t:制表符

    • \v:垂直制表符

    • \d:匹配数字,效果同[0-9]

    • \w:匹配数字、字母、。效果同[0-9a-zA-Z]

    • \W:匹配非数字、字母、下划线。同[^0-9a-zA-Z_]

    //匹配 数字、字母中的任意一个和ABC
    var parrent = /[0-9a-zA-Z]ABC/i;
    var str = "eABcCds_ABCsdf";
    console.log(parrent.test(str));//true
    
    //匹配 数字、空白字符中的任意一个
    var str = "this is 3haha";
    var parrent = /[\d\s]/;
    console.log(parrent.test(str));//true
    
    //匹配 包含 b和空白字符和x
    var str = "this is b xhaha.";
    var parrent = /b\sx/;
    console.log(parrent.test(str));//true
    
    //按照空格或,或!中的任意一个进行字符串切割
    var str = "this is a box,box,box!";
    console.log(str.split(/[ ,!]/));//["this", "is", "a", "box", "box", "box", ""]
    

    相关文章

      网友评论

          本文标题:正则

          本文链接:https://www.haomeiwen.com/subject/pslfqqtx.html