2014-06-17 37 views
4

我想替換這樣的:這個 「ad231-3213-e12211」 「[ID]」JavaScript的正則表達式支架

我用正則表達式:/\[ID\]/i

而且它與.replace(/\[ID\]/i, id)

工作完美

現在我封裝它在這個函數:

self.changeUrl = function (url, id, replaceExp) { 
    replaceExp = replaceExp === 'undefined' ? new RegExp("\[ID\]") : replaceExp instanceof RegExp ? replaceExp : new RegExp("\[ID\]"); // basically ensure that this is a regexp 

    return url.replace(replaceExp, id); 
}; 

這:

self.changeUrl = function (url, id, replaceExp) { 
    replaceExp = replaceExp === 'undefined' ? new RegExp("\u005BID\u005D") : replaceExp instanceof RegExp ? replaceExp : new RegExp("\u005BID\u005D"); // basically ensure that this is a regexp 

    return url.replace(replaceExp, id); 
}; 

而他們都沒有工作,我失蹤了什麼?

+1

使用'「\\ [ID \\]」' – hjpotter92

+0

謝謝,後一個答案,爲什麼你要做到這一點,我將接受它 –

回答

4

由於您將字符串傳遞給您的RegExp構造函數,因此您還需要在字符串中跳過\字符。因此,使用\\[這實際上會變成\[裏面的字符串變量;而\[只會成爲[

new RegExp("\\[ID\\]") 
1

"\[ID\]" - 這基本上是翻譯中的正則表達式爲[ID],因爲在JavaScript中的反斜槓作爲轉義字符

2

可以肯定的:

如果你想更換一個固定的子像[ID]你根本不需要regex,你可以簡單地寫:

self.changeUrl = function (url, id, replaceExp) { 
    return (replaceExp instanceof RegExp) ? url.replace(replaceExp, id) 
             : url.replace('[ID]', id); 
}; 

self.changeUrl = function (url, id, replaceExp) { 
    return (replaceExp === 'undefined') ? url.replace('[ID]', id) 
             : url.replace(replaceExp, id); 
}; 

(這取決於你想有行爲)

+0

這是一個非常有趣的答案,我唯一要說的是使用正則表達式可以打開更多的替換選項。如果'[ID]'不夠好,那麼它可能必須變得更復雜。 –

+0

@ No1_Melman:可以使用RegExp實例作爲第三個參數調用這兩個函數。 –