[英]Is it necessary to escape the replacement string in a String.replace() call with a regular expression?
不知道是否有必要在Javascript中的替換操作的替換字符串中轉義某些字符。 我有的是這個:
let t = "##links##";
let t2 = t.replace(/##links##/, `{"labels": ["'$'"]}`);
console.log(t2);
控制台輸出是:
{"labels": ["'"]}
這非常令人驚訝。 但是,我在文檔中找不到任何建議逃避替換字符串的內容。 那么,這里發生了什么?
您需要將$
符號加倍以替換為文字$
:
let t = "##links##"; let t2 = t.replace(/##links##/, `{"labels": ["'$$'"]}`); console.log(t2);
請參閱將字符串指定為列出正則表達式替換部件中所有可能的“特殊”組合的參數 。
如果你檢查那個表,你會看到$
啟動“特殊”序列。 因此,它應該以某種方式逃脫。 在JS中,一美元用於逃避文字美元符號。 $&
是對整個匹配的反向引用, $`
插入匹配子字符串之前的字符串部分, $'
插入匹配子字符串后面的字符串部分。 $n
是n組的后退。
因此,如果您有一個動態的,用戶定義的替換字符串,不應該有反向引用,您可以使用
let t = "##links##"; let rep = `{"labels": ["'$'"]}`; let t2 = t.replace(/##links##/, rep.replace(/\\$/g, '$$$$')); console.log(t2);
美元符號( $
)特別replace
。 如果你想要一個單一的文字美元符號,請使用$$
。 否則, 替換字符串可以包含以下特殊替換模式 :
$$
插入一個$
。$&
插入匹配的子字符串。$`
插入匹配子字符串之前的字符串部分。$'
插入匹配子字符串后面的字符串部分。$n
其中n
是小於100的正整數,插入第n
個帶括號的子匹配字符串,前提是第一個參數是RegExp
對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.