2017-07-18 85 views
1

我有一個字符串'abc.132131.001.3'。我想用'~'替換'.'的每個出現次數。替換。與〜

我用

str.replace(/[.*?^${}()|[\]\\]/g, "\~$&"); 

但輸出這是

abc~.132131~.001~.3 

我也試過

str.replace(/./g, "~"); 

,這將返回

'~~~~~~~~~~~~' 

回答

2

看的第二個參數replace,你有"\~$&"

反向引用$&反向引用整個匹配的字符串。在這種情況下,.是匹配的字符串。因此,您將替換.~,然後匹配.

刪除$&,你會沒事的。

4

我已經使用str.replace(/[.*?^${}()|[\]\\]/g, "\~$&");,但輸出爲abc~.132131~.001~.3

這正則表達式匹配的任何字符外[]支架,不僅僅是句號,但在你的替換字符串$&部分有任何文本的正則表達式匹配的特殊意義,這將是字符滿座.。因此,您將每個.更改爲~.。你可以更新你的替換字符串到"~",你會得到你想要的輸出。

我也試過str.replace(/./g, "~");,這將返回'~~~~~~~~~~~~'

這是因爲在regular expression一個.這不是一個「字符集」用方括號內(在您的其他嘗試)除換行符任何字符匹配,因此在字符串中的每個字符被替換。

要搜索你必須使用一個反斜槓逃脫它的正則表達式字面全站'.'字符:

var str = 'abc.132131.001.3' 
 
    
 
var result = str.replace(/\./g, '~') 
 
    
 
console.log(result)

+2

'/ [。] /'也匹配問題中的文字'.'。 –

+0

@JoeFrambach - 確實如此。說實話,我沒有仔細閱讀第一次嘗試,因爲它在修復之前被格式化了。我可以補充一點。 – nnnnnn

1

您還可以使用split()join()

var string = "abc.132131.001.3"; 
 
document.write(string.split(".").join("~"));