2011-05-09 35 views
3

代碼:的Javascript .replace()多次調用,有的用變量,有的用純文本

var csMasterPrefix = 'CS_', 
    cpMasterPrefix = 'CP_', 
    csContentPrefix = 'CSContent_', 
    cpContentPrefix = 'CPContent_'; 

/* ... */ 

$this.attr("id") 
    .replace(csMasterPrefix,'') 
    .replace(cpMasterPrefix,'') 
    .replace(csContentPrefix,'') 
    .replace(cpContentPrefix,'') 
    .replace('ibtn','') 
    .replace('btn','') 
    .replace('lbtn','') 
    .replace('img','') 
    .toLowerCase(); 

問:讓我先說,我看着那個說的解決方案前言做你自己的「乾淨」功能。我的問題真的不是如何做到這一點,而是我該如何製作ONE正則表達式會將所有替換調用合併爲一個?

回答

8

使用RegExp,選擇運營商|和全局標誌g

var to_replace = [csMasterPrefix, ..., 'ibtn', ...]; 
var id = $this.attr("id").replace(new RegExp(to_replace.join('|'), 'g'), ''); 

不知道這是否是最有效的解決方案,但它會奏效。

替代方法你可以循環使用to_replace並進行正常的字符串替換。

+1

請注意,如果'to_replace'包含'('和'[','.'(及其他)'等特殊字符,則此函數不安全。由於ID不允許包含此類字符,因此您很安全。 – Lekensteyn 2011-05-09 19:04:26

+0

+1不錯的作品Felix!我從這篇文章中學到了很多東西。 – pixelbobby 2011-05-09 19:06:11

+0

@Lekensteyn:是的,你說的沒錯,因爲OP代碼中沒有特殊字符,但我應該有... – 2011-05-09 19:06:34