2012-06-09 180 views
1

我最近遇到了crockford的Javascript supplant函數。功能是這樣的 -Javascript替代品

if (!String.prototype.supplant) { 
    String.prototype.supplant = function (o) { 
     return this.replace(/{([^{}]*)}/g, 
      function (a, b) { 
       var r = o[b]; 
       return typeof r === 'string' || typeof r === 'number' ? r : a; 
      } 
     ); 
    }; 
} 

我需要了解這個函數的機制以及這個工作到底有多精確。我遇到了很多解釋,但都傾向於通過引入使事情變得更糟的技術來使事情變得複雜。

試圖尋找

1. regex解釋這裏

2.邏輯功能(A,B)的代碼塊

3.使用返回語句

+0

你想讓別人一步一步地穿過它嗎? –

+1

不完全,但只是一個簡單的邏輯翻譯... :) – borax12

+1

@ borax12我相當肯定你提供了一個錯誤的代碼示例。我可以通過正則表達式中的空格和代碼中的「智能」引號來判斷。請張貼正確的代碼,否則您將得到錯誤的解釋。此外,你從那裏得到的功能文本不包含解釋? – Tomalak

回答

3

爲託默勒格說,在正則表達式的空間是不平凡的

  1. 正則表達式基本上匹配這樣的東西:{ ... }[^{}]表示花括號中的內容可以是除捲曲節點以外的任何內容。 *表示內容的長度可以是零或任何數字。圓括號內的部分是Parenthesized Substring Matches

  2. 該函數傳遞字典o,並使用上述正則表達式執行replace。只要有匹配,就會調用replace的回調函數。 a是整個匹配部分,而b是與「括號內的子串匹配」對應的子匹配部分。回調函數查找b在詞典中的鍵,並返回對應的值

  3. return語句意味着如果r類型是字符串或數字,則返回r;否則返回a

您可以通過結帳賈裏德Farrish,它說明了如何匹配和替換工作的很清楚所提供的example code

+0

這裏是一個小提琴,顯示不同的變量,這使得它更容易理解:http://jsfiddle.net/userdude/E53Tv/沒有冒犯,但我不要認爲這是對內部發生的事情的一個非常透徹或簡單的解釋。 –

+0

@ xvatar-感謝正則表達式的解釋 – borax12

+0

@JaredFarrish我很匆忙,所以我只是試圖一個接一個的回答問題。剛剛更新了帖子,希望現在好一點。順便說一句,很好的例子! – xvatar