[英]javascript - string replacement, replace “^” with “” and “^^” with “^”
基本示例:
我有以下字符串:
"[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]'));
由於替換調用將對整個字符串起作用,因此如果一個接一個地執行,則兩個替換將相互干擾。 無論調用替換的順序如何,這總是會導致錯誤的結果。
解決這個問題的唯一方法是使用中間狀態。 例如,如果我們使用+作為中間符號,它將類似於:
顯然,+符號可能會出現在原始字符串本身中,因此您需要選擇一個不會出現在原始字符串中的更好的中間符號。 它很可能是多角色甚至是控制角色。
編輯 :使用替換函數的接受答案是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.