转义JavaScript中特殊字符列表的智能方法

时间:2019-06-04 09:37:47

标签: javascript

我有一个特殊字符列表: + - & | ! ( ) { } [ ] ^ ~ * ? \ :

除了\\之外,我只想用一个前导反斜杠\来使它们全部转义。 例如\的字符串必须更改为(1+1)\2 实际上,它为每个已定义的特殊字符加上两个反斜杠,而给反斜杠仅加一个反斜杠。

我写了这个函数,实际上效果很好:

\\(1\\+1\\)\\2

但是我对当前的实现不满意。 因为我认为很难阅读和维护它。

是否存在其他“更智能”的解决方案/框架来解决此问题?我在想一个函数,该函数使用给定的特殊字符列表替换字符串中的特殊字符。

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)