2014-10-05 46 views
0

我想將字符串dkfj-dkfj-sflj轉換爲dkfj-woop$dkfj-sflj

這是我已經試過:

var my_string = "dkfj-dkfj-sflj"; 
var regex = new RegExp("(\\w+)-(\\w+)-(\\w+)", "g"); 
console.log(my_string.replace(regex, "$1$woop[\$$2]$3"); 

我的結果是:dkfj-woop$2-sflj。由於「$」位於「$ 2」捕獲組的前面,因此會佔用該捕獲組。

假設我想讓我的正則表達式和捕獲組字符串的結構保持不變,那麼轉義該「$」的正確方法是什麼?

回答

3

這不是你如何逃避$replace。反斜槓轉義工作在解析器級別,像replace這樣的函數不能賦予像\$這樣的新轉義序列的特殊含義,因爲它們甚至不是\$。字符串"\$"與字符串"$"完全等效,都產生相同的字符串。如果您想將反斜槓和美元符號傳遞給函數,則需要轉義的反斜槓本身:"\\$"

無論如何,replace希望你逃過$$$。你需要"$1$woop[$$$2]$3";一個$$爲字面$$2爲他捕獲組。

閱讀Specifying a string as a parameterreplace文檔。

1

在替換零件中使用$$來打印文字$符號,如果您的模式被封閉在正斜槓中,則不需要在替換零件中具有字符類。

> var my_string = "dkfj-dkfj-sflj"; 
undefined 
> my_string.replace(/(\w+)-\w+-(\w+)/, "$1-woop$$$1-$2") 
'dkfj-woop$dkfj-sflj'