javascript的replace之Regex的淺析

來源:互聯網
上載者:User

標籤:obj   for   迴圈   gets   string   logs   講解   函數返回   重複   

在javascript中,字串的replace方法可以指定替換某些字串。

1、直接替換字串

"yy/MM/dd".replace("yy","2017");//替換後,原字串變為2017/MM/dd

這是直接指定將原字串中的yy替換為2017。

 

2、指定用函數傳回值替換原指定字串

"yy/MM/dd".replace("yy",function(){return "2017";});//替換後,原字串變為2017/MM/dd

這是用函數傳回值2017替換原字串中的yy。

 

3、用Regex指定需要被替換的源字串

"yy/MM/dd".replace(/yy/,"2017");

 

看了上面最簡單的,咱來一個比較複雜的。看下面的代碼:

Date.prototype.format = function(e) {    var t = this,    n = Date._formators;    return n || (Date._formators = n = {        y: function(e, t) {            return e = e.getFullYear(),            e < 0 ? "BC" + -e: t < 3 && e < 3e3 ? e % 100 : e        },        M: function(e) {            return e.getMonth() + 1        },        d: function(e) {            return e.getDate()        },        H: function(e) {            return e.getHours()        },        m: function(e) {            return e.getMinutes()        },        s: function(e) {            return e.getSeconds()        },        e: function(e, t) {            return (t === 1 ? "": t === 2 ? "周": "星期") + [t === 2 ? "日": "天", "一", "二", "三", "四", "五", "六"][e.getDay()]        }    }), //這個逗號是用來幹啥的?為何括弧之間會有這個逗號?    (e || "yyyy/MM/dd HH:mm:ss").replace(/(\w)\1*/g,    function(e, r) {//這個function是怎麼來的        if (r in n) {            r = "" + n[r](t, e.length);            while (r.length < e.length) r = "0" + r;            e = r        }        return e    })}

上面這塊代碼對於新手來說,看著比較複雜,為啥括弧之間會有逗號?為啥Regex(\w)後會有\1*?replace函數的第二個參數function(e,r)是怎麼來的,為何這個function會有兩個參數,這兩個參數到底是什麼意思?估計這些是新手最想問的。別急,接下來會一一講解這些問題。

一、括弧之間為何會有逗號?

這個屬於逗號運算子。逗號運算子的的運算規則是自左向右運算,並返回最後一個運算式的值。

如:var data=(x=2,x*3,x*5);

上面這個運算式中,最先計算括弧裡面的值。括弧裡面的運算規則就是根據逗號運算子的規則去計算的,自左向右計算。首先計算x=2,第二個參數為6,第三個參數為10。data就是最後的一個參數值10。

 

二、Regex(\w)後面的\1*是什麼意思?

\1表示重複正則第一個圓括弧內匹配到的內容,\2表示重複正則第二個圓括弧內匹配到的內容,如果有嵌套的圓括弧,順序是按左括弧的次序計算的。星號*是匹配零個或多個。

即"yy/MM/dd".replace(/(\w)/,"1"),這個\w首先匹配字元y,則最終的結果為"1y/MM/dd",如果是"yy/MM/dd".replace(/(\w)\1/,"1"),則最終的結果是"11/MM/dd",\1就是多匹配一個(\w)這個參數。按照這樣來看,則"ybyb/MM/dd".replace(/(\w)(\w)\1\2/,"2")的結果為"2/MM/dd"。

 

三、replace函數的第二個參數function(e,r)是怎麼來的,為何這個function會有兩個參數,這兩個參數到底是什麼意思?

這個函數應該是replace函數裡面內建的,但是需要外面傳一個實體方法進去。e傳入的參數值為整個匹配的結果,如:yyyy。r傳入的參數為(\w)匹配的結果,如:y。如果在Regex後有g的話,那就是對整個字串進行匹配並替換,有多少個匹配就迴圈多少次替換操作。如下面的代碼所示:

var obj={    y:1,    M:2,    d:3};var source="yyyy/MM/dd".replace(/(\w)\1*/g,function(word,element){    if(element in obj){        word=obj[element].toString();    }    return word;});document.write(source);//對Regex進行了迴圈匹配,所以結果為:1/2/3

  

 

javascript的replace之Regex的淺析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.