簡體   English   中英

javascript - 字符串替換,將“^”替換為“”,將“^^”替換為“^”

[英]javascript - string replacement, replace “^” with “” and “^^” with “^”

刪除JavaScript中的臨時轉義字符...

基本示例:

我有以下字符串:

"[x^::^^y]"

輸出應該是:

"[x::^y]"

從本質上講,任何出現^另一個不鄰居^應該被刪除,以及任何OCCURENCES ^^應改為^

更多例子:

.parse("[^^x:^y^:^^^^^^]") // output: "[^x:y:^^^]"
.parse("[^x:^^^^y^^^z]") // output: "[x:^^y^z]"

它將成為我正在開發的JSON替代解析腳本的一部分,希望減少內部存儲文件的文件大小。

我會使用.replace()和這樣的替換函數:

 function parse (str) { return str.replace(/\\^{1,2}/g, s => s.slice(1)); } console.log(parse('[x^::^^y]')); console.log(parse('[^^x:^y^:^^^^^^]')); console.log(parse('[^x:^^^^y^^^z]')); 

還有一個想法: 捕捉一個^的對以$1或不獲取剩余,並替換為$1

 function parse (s) { return s.replace(/(\\^)\\^|\\^/g, '$1'); } console.log(parse('[^x:^^^^y^^^z]')); 

由於替換調用將對整個字符串起作用,因此如果一個接一個地執行,則兩個替換將相互干擾。 無論調用替換的順序如何,這總是會導致錯誤的結果。

解決這個問題的唯一方法是使用中間狀態。 例如,如果我們使用+作為中間符號,它將類似於:

  1. 用+替換^^,
  2. 用空字符串替換^,
  3. 然后,用^替換+

顯然,+符號可能會出現在原始字符串本身中,因此您需要選擇一個不會出現在原始字符串中的更好的中間符號。 它很可能是多角色甚至是控制角色。

編輯 :使用替換函數的接受答案是JS更好的方法。 我在這里留下這個答案,以防萬一有人在其他語言中遇到類似問題時遇到了這個問題。

上面的優秀答案!!

但另一種可能的方法是使用前瞻和后視。

 function replace_carets(mystring) { return mystring .replace(/(?<!\\^)(\\^{2})*\\^(?!\\^)/g, "$1") //removes isolated ^ or last odd numbered ^ .replace(/\\^{2}/g, "^"); //replaces ^^ with ^ } console.log(replace_carets("[x^::^^y]")); console.log(replace_carets("[^^x:^y^:^^^^^^]")); console.log(replace_carets("[^x:^^^^y^^^z]")); 

遠非優雅,但我挑戰自己這樣做,以便與你分享。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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