簡體   English   中英

JavaScript 字符串全部替換

[英]JavaScript String Replace all

我有以下字符串,我想替換字符串的所有特殊字符。

let data = "`test@#$demo%^here[sf.s]\|demo{delata}*testing?+$^()`"

特殊的角色:

let spcial=[".", "+", "*", "?", "^", "$", "(", ")", "[", "]", "{", "}", "|", "\"];

最后 output:

test@#\\$demo%\\^here\\[sf\\.s\\]\\\\\|demo\\{delata\\}\\*testing\\?\\+\\$\\^\\(\\)

簡而言之,我想在特殊字符前添加 \ 我該怎么做?

 let data = "`test@#$demo%^here[sf.s]\\|demo{delata}*testing?+$^()`" let spcial=[".", "+", "*", "?", "^", "$", "(", ")", "[", "]", "{", "}", "|", "\\"] const res = data.split("").map(ch => spcial.includes(ch)? "\\\\" + ch: ch).join("") console.log(res)

 let data = "`test@#$demo%^here[sf.s]\|demo{delata}*testing?+$^()`" let spcial=[".", "+", "*", "?", "^", "$", "(", ")", "[", "]", "{", "}", "|", "\\"] for (let c of data) { if(spcial.includes(c) ) { data = data.replace(c, '\\'+c) } } console.log(data)

 str = "test@#$demo%^here[sf.s]\|demo{delata}*testing?+$^()"; const spcial=[".", "+", "*", "?", "^", "$", "(", ")", "[", "]", "{", "}", "|", "\\"]; spcial.forEach(myFunction); function myFunction(value) { str = str.replaceAll(value, "\\" + value); } console.log(str)

我認為從長遠來看,學習一些正則表達式 (regex/regexp) 對您有好處。 我用來查找特殊字符的正則表達式是/[^a-zA-Z0-9]/g 如果您將replace方法與回調 function 一起使用,您可以獲取匹配的特殊字符m並能夠將其替換為\\${m}

在此處閱讀有關 RegEx 的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

在此處閱讀有關replace的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

要完全按照上面的要求進行操作,這將是一個正則表達式實現:

const data = "`test@#$demo%^here[sf.s]|demo{delata}*testing?+$^()`";
const specialCharacters = /\.|\+|\*|\?|\^|\$|\(|\)|\[|\]|\{|\}|\||\\/g;
const output = data.replace(specialCharacters, (m) => `\\${m}`);

console.log(output);

我建議檢查更多特殊字符。

const data = "`test@#$demo%^here[sf.s]|demo{delata}*testing?+$^()`";
const output = data.replace(/[^a-zA-Z0-9]/g, (m) => `\\${m}`);
console.log(output);
let data = "`test@#$demo%^here[sf.s]\|demo{delata}*testing?+$^()`";
let special=[".", "+", "*", "?", "^", "$", "(", ")", "[", "]", "{", "}", "|", "\\"];
let [...chars] = data;
chars = chars.map(char => {
    if (special.includes(char)) return `\\${char}`;
    return char;
}
data = chars.join("");

方法 1:來自固定的特殊字符列表

您可以一次全部替換它,使用如下正則表達式:

 let data = "test@#$demo%^here[sf.s]\|demo{delata}*testing?+$^()"; let replaced = data.replace(/[\.\+\*\?\^\$\(\)\[\]\{\}\|\\]/g, '\\$&'); console.log(replaced);

請注意,特殊字符在正則表達式中列出,並用反斜杠轉義。 如果您想了解更多有關其工作原理的信息,請查看此處的“解釋”部分

方法 2:來自特殊字符的動態列表

如果你想從數組動態構建這個正則表達式,你可以這樣做:

 let data = "test@#$demo%^here[sf.s]\|demo{delata}*testing?+$^()"; let specialChars = [".", "+", "*", "?", "^", "$", "(", ")", "[", "]", "{", "}", "|", "\\"]; let regexp = new RegExp(`[\\${specialChars.join('\\')}]`, 'g'); let replaced = data.replace(regexp, '\\$&'); console.log(replaced);

結果

在這兩個示例中,結果將是:

test@#\$demo%\^here\[sf\.s\]\|demo\{delata\}\*testing\?\+\$\^\(\)

使用全局替換(最后用g表示),您可以一次替換所有字符,而無需循環。

暫無
暫無

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

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