正则和字符串之间的关系梳理

正则一直让人又爱又恨,因为使用正则能够快速方便的解决一些原本很复杂的问题。而正则用的最多也就是字符串的处理。他俩关系还真是有点暧昧复杂,让人傻傻有点搞不清楚,有必要进行梳理一番。

 

正则常用的方法有:

1、test:pattern.test(string); 返回true or false;

2、exec:pattern.test(string);返回一个匹配信息的数组,没有匹配项返回null。

  PS:同一个字符串上多次调用始终返回第一个匹配信息。只有设置了(g)全局属性,才会返回下一个匹配项,直到字符串末尾。

    var pattern=/<(\w+)(>)/g;
    var se=pattern.exec(str);
    var se1=pattern.exec(str);
    console.log(se)//[ "<tt>", "tt" ,">"]数组第一项是匹配项,第二项代表第一个捕获项
    console.log(se1)//[ "<rr>", "rr",">" ]数组第一项是匹配项,第二项代表第一个捕获项,第三项代表第二个捕获项

 

字符串中可以使用正则的方法:

1、match:只接受一个参数,与调用pattern.exec()本质上相同,返回同一个数组。

var str='<tt><rr><rr/><ll><lt></lt><ll/><dd></dd><rr/><tt><tt/><rr><rr/>';
    var ss=str.match(/<\w+>/);    //[ "<tt>" ]
    var sss=str.match(/<\w+>/g);    //[ "<tt>", "<rr>", "<ll>", "<lt>", "<dd>", "<tt>", "<rr>" ]

 

2、search:只接受一个参数,返回字符串中第一个匹配项的索引,没有找到返回-1

var sea=str.search(/<\w+>/);  //0
var sea1=str.search(/<\w+\/>/);//8

 

3、replace:

    var text="cat bat ut dat";
    var re=text.replace("at","11");//c11 bat ut dat
    var re1=text.replace(/at/g,"11");//c11 b11 ut d11

    var re2=text.replace(/(.a(t))/g, "$1$2") ;//catt batt ut datt
    
    function replaceText(text){
        return text.replace(/at/g,function(match,pos,originalText){
            console.log(match+" "+pos+" "+originalText);//要输出三次
        })
    }
    replaceText(text);
    //at 1 cat bat ut dat 
    //at 5 cat bat ut dat 
    //at 12 cat bat ut dat
    //最终结果是cundefined bundefined ut dundefined 
    //因为函数没有返回值,所以是undefined

 

4、split:可以有第二个参数,表明返回的数组的长度

    var result=text.split(/\s/);//[ "cat", "bat", "ut", "dat" ]
    var result1=text.split(/\s/,2);//[ "cat", "bat"]    

 

posted @ 2016-09-16 20:09  huansky  阅读(537)  评论(0编辑  收藏  举报