我有一个特殊字符列表:
+ - & | ! ( ) { } [ ] ^ ~ * ? \ :
除了\\
之外,我只想用一个前导反斜杠\
来使它们全部转义。
例如\
的字符串必须更改为(1+1)\2
实际上,它为每个已定义的特殊字符加上两个反斜杠,而给反斜杠仅加一个反斜杠。
我写了这个函数,实际上效果很好:
\\(1\\+1\\)\\2
但是我对当前的实现不满意。 因为我认为很难阅读和维护它。
是否存在其他“更智能”的解决方案/框架来解决此问题?我在想一个函数,该函数使用给定的特殊字符列表替换字符串中的特殊字符。
答案 0 :(得分:2)
看到了这个正则表达式:
/([-\/\\^$*+?.()|[\]{}])/g
here?在输入的模板文字上使用String.raw
,因此八进制可以解释为文字\2
。 \
是例外(出于某些不可思议的原因),您可以链接.replace()
。
const escape = string => string.replace(/([-\/^$*+?.()|[\]{}])/g, `\\$1`).replace(/([\\])/g, `\\\$1`);
console.log(escape(String.raw`(1+1)\2`));
答案 1 :(得分:0)
您可以检查此解决方案。我只是一个接一个地循环浏览所有字符,并检查哪个字符匹配,然后将正斜杠附加为前缀。
const specialChars = ["+", "-" ,"&", "|", "!", "(", ")", "{", "}", "[", "]", "^", "~", "*", "?", "\\", ":",];
let string = `(1+1)\\2`; // double slash is needed to avaoid escaping
let changedString = string.split('').reduce((newString, char) => {
if(specialChars.includes(char) && char !== '\\') {
return newString += `\\\\${char}`;
} else if(char == "\\") {
return newString += `\\${char}`;
} else {
return newString += char;
}
}, '')
console.log(changedString)