2014-03-24 23 views
0

我想在Angular中實現一個動態服務(雖然Angular並不是真的那麼重要),但我無法弄清楚如何實現以下假設。Javascript:某種preg_match在每場比賽中都有回調?

比方說,我有一個正則表達式,

// Should match a phone number 
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/ 

,我想這將需要一個給定的字符串,這很可能是一段文字,找到所有匹配模式的字符串的方法,以及在它們上運行一個方法來將電話號碼替換爲它們在通訊錄中的聯繫人。

var string = "555-790-2342 is one, 555-555-2344 is another."; 

我可以pattern.test是否有任何比賽,我可以做一個搜索和替換,但如果,例如,搜索和替換是不是一個對一個,會是什麼過程是?假設有結果的列表,如:

var numbers = { 
    "555-790-2342" : "John Smith", 
    "555-555-2344" : "Bob Smith", 
    "555-324-2342" : "Dana Smith" 
}; 

我想要匹配擊中每個圖案的數字對象和更換匹配的數字(密鑰)用適當的名稱(值)的數字對象。我完全不知道這可能如何工作。

回答

4

一個令人驚訝的鮮爲人知的功能:

string.replace(/your regex here/g,function(match,sub1,sub2) { 
    // for obvious reasons, use meaningful argument names! 
    // now do stuff 
    // optionally: 
    return match; 
}); 

在面值整個事情是一個空操作,因爲它不僅只是返回未修改的比賽作爲替代品,但它也丟棄所產生的字符串無論如何(因爲它沒有分配給變量)。但是,回調可能帶來的副作用,如填充物體等

當然,如果你願意,你可以在其它return的東西太多,比如return numbers[match];

+0

這絕對完美的作品,我真的以你的迴應速度眼花繚亂。丹科。 – bmelton