JS与正则表达式相关的方法总结

regexp实例方法

exec()javascript

  1. exec()是专门为捕获组设计的方法,exec接受一个参数,即须要应用正则的字符串,返回一个数组,或者没有匹配的时候返回null。注:/^/.exec(‘str’)返回一个数组,第一项为”。由于在’str’中在字符串开始的地方存在^,不算没有匹配。
  2. exec()返回的数组格式:[‘总匹配字符串’,捕获1,捕获2…,index,input],其中若是没有捕获组,数组中就没有捕获项,若是有捕获组,可是没有捕获到字符,则数组中对应的捕获项为undefined。这是一个Array的实例,可是有两个额外的属性:index 表示匹配项在字符串中的位置,而 input 表示应用正则表达式的字符串。java

    注:能够给array添加属性,输出的格式以下:
    var a = new Array(1,2);
    a.input = 'a';
    console.log(a); //[ 1, 2, input: 'a' ]
  3. 对于 exec()方法而言,即便在模式中设置了全局标志g,它每次也只会返回一个匹配项。在不设置全局标志的状况下,在同一个字符串上屡次调用 exec()将始终返回第一个匹配项的信息。而在设置全局标志的状况下,每次调用 exec()则都会在字符串中继续查找新匹配项,而且该正则表达式的lastindex属性会改变正则表达式

    eg:
    var a = /w/g;
    
    var b = 'aawasdadwaaw';
    for(var i=0;i<3;i++){
        console.log(a.lastIndex);
        console.log(a.exec(b));
    
    }
    //0
    //[ 'w', index: 2, input: 'aawasdadwaaw' ]
    //3
    //[ 'w', index: 8, input: 'aawasdadwaaw' ]
    //9
    //[ 'w', index: 11, input: 'aawasdadwaaw' ]

test()数组

  1. test()接受一个字符串参数。在模式与该参数匹配的状况下返回 
    true;不然,返回 false。在只想知道目标字符串与某个模式是否匹配,但不须要知道其文本内容的 
    状况下,使用这个方法很是方便。所以,test()方法常常被用在 if 语句中,用法:函数

    var text = "000-00-0000";
    var pattern = /\d{3}-\d{2}-\d{4}/;
    if (pattern.test(text)){
        alert("The pattern was matched.");
    }

字符串的模式匹配方法

match()spa

  1. match函数在非全局状况与exec函数返回结果彻底一致,只是match函数是String的实例方法,调用方法为’str’.match(regexp);
  2. match函数在全局模式下与exec函数返回结果不一样,match会返回全部匹配项组成的一个数组,没有input和index属性,而且仅仅返回整个的匹配项,即忽略正则表达式中的捕获组。 
    eg: 
    var a = /(w)a/g;设计

    var b = 'aawasdadwaaw';
    for(var i=0;i<3;i++){
        console.log(a.lastIndex);
        console.log(b.match(a));
    
    }
    //0
    //[ 'wa', 'wa' ]
    //0
    //[ 'wa', 'wa' ]
    //0
    //[ 'wa', 'wa' ]

search()code

  1. search接受一个正则表达式参数,返回字符串中第一个匹配项的索引,若是没有找到匹配项,返回-1,不管正则表达式是否设置了g标志,都会返回第一个匹配项的索引。

replace()regexp

  1. replace是字符串替换方法,接受两个参数,匹配的正则表达式(或者一个字符串)和替换用的字符串。
  2. 若是第二个参数是字符串,能够在字符串中插入特殊的字符序列索引

    $$ $
    $& 匹配整个模式的子字符串(不是输入的字符串)。与RegExp.lastMatch的值相同
    $' 匹配的子字符串右边的内容。与RegExp.rightContext的值相同
    $` 匹配的子字符串左边的内容。与RegExp.leftContext的值相同
    $n 匹配第n个捕获组的子字符串,其中n等于0~9。例如,$1是匹配第一个捕获组的子字符串,$2是匹配第
    二个捕获组的子字符串,以此类推。若是正则表达式中没有定义捕获组,则使用空字符串
    $nn 匹配第nn个捕获组的子字符串,其中nn等于01~99。例如,$01是匹配第一个捕获组的子字符串,$02
    是匹配第二个捕获组的子字符串,以此类推。若是正则表达式中没有定义捕获组,则使用空字符串

    注:javascript高级程序设计第三版将$’与$`的用法写反了。

  3. 若是第二个参数是函数,在只有一个匹配项(即与模式匹配的字符串)的状况下,会向这个函数传递 3 个参数:模式的匹配项、模式匹配项在字符串中的位置和原始字符串。在正则表达式中定义了多个捕获组的状况下,传递给函数的参数依次是模式的匹配项、第一个捕获组的匹配项、第二个捕获组的匹配项……,但最后两个参数仍然分别是模式的匹配项在字符串中的位置和原始字符串。这个函数应该返回一个字符串,表示应该被替换的匹配项。

    在全局模式下,会一次次调用这个函数,直到这个字符串处理完成。

split()

  1. split方法也能够指定正则表达式,而且还能够设置第二个参数来指定返回的项数。 
    高程上的例子:

    var colorText = "red,blue,green,yellow";
    var colors1 = colorText.split(","); //["red", "blue", "green", "yellow"]
    var colors2 = colorText.split(",", 2); //["red", "blue"]
    var colors3 = colorText.split(/[^\,]+/); //["", ",", ",", ",", ""]
相关文章
相关标签/搜索