簡體   English   中英

是否有必要使用正則表達式轉義String.replace()調用中的替換字符串?

[英]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中,一美元用於逃避文字美元符號。 $&是對整個匹配的反向引用, $`插入匹配子字符串之前的字符串部分, $'插入匹配子字符串后面的字符串部分。 $nn組的后退。

因此,如果您有一個動態的,用戶定義的替換字符串,不應該有反向引用,您可以使用

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM