2008-11-13 126 views
6

任何現有的JavaScript框架都有一個非正則表達式replace()函數,或者它已經作爲一次性函數在web上發佈了嗎?JavaScript非正則表達式替換

例如,我想替換"@!#$123=%",我不想擔心要轉義哪些字符。大多數語言似乎都有替代方法。我希望看到這個簡單的事情增加。

回答

18

我可能會誤解你的問題,但JavaScript並有一個replace()

var string = '@!#$123=%'; 
var newstring = string.replace('@!#$123=%', 'hi'); 

編輯:(見註釋)第五版似乎確實有它的這個信息,雖然它不顯示當我link directly它。這裏是相關部分:

replace()方法執行搜索和替換操作。它將正則表達式作爲其第一個參數,並將替換字符串作爲其第二個參數。它搜索它被調用的字符串與指定的模式匹配。如果正則表達式設置了g標誌,則replace()方法會用替換字符串替換該字符串中的所有匹配項;否則,它只會替換它找到的第一個匹配項。 如果replace()的第一個參數是一個字符串而不是正則表達式,那麼該方法會逐字地搜索該字符串,而不是像search()那樣使用RegExp()構造函數將其轉換爲正則表達式。

+0

呵呵。也許我在看一個只顯示正則表達式例子的舊版本的「Javascript:The權威指南」。所以我從來沒有嘗試過上面的代碼。現在我覺得很愚蠢。 -10個冷點對我來說。 – BuddyJoe 2008-11-14 00:43:40

+0

它發生,我剛剛找到了lastIndexOf()方法... *嘆* * – Owen 2008-11-14 00:45:54

13

我有完全相同的問題,搜索非正則表達式JavaScript字符串替換()方法。我的解決方案是使用分裂(組合)和join():

"some text containing regex interpreted characters: $1.00".split("$").join("£"); 

這給:

「一些含正則表達式的文本解釋的字符:£1.00」

比較與替換():

"some text containing regex interpreted characters: $1.00".replace(new RegExp("$"),"£") 

這奇怪給:

「一些含正則表達式的文本解釋的字符:$ 1.00£」

1

試試這個:

function replaceAllTemp(str,find, replace) { 
var ignoreCase=true; 
var _token; 
var token=find; 
var newToken=replace; 
var i = -1; 

if (typeof token === "string") { 

    if (ignoreCase) { 

     _token = token.toLowerCase(); 

     while((
      i = str.toLowerCase().indexOf(
       token, i >= 0 ? i + newToken.length : 0 
      )) !== -1 
     ) { 
      str = str.substring(0, i) + 
       newToken + 
       str.substring(i + token.length); 
     } 

    } else { 
     return this.split(token).join(newToken); 
    } 

} 
return str; 
};