如何从javascript var中删除反斜杠转义?

Bru*_*oLM 28 javascript escaping

我有这个var

var x = "<div class=\\\"abcdef\\\">";
Run Code Online (Sandbox Code Playgroud)

这是

<div class=\"abcdef\">
Run Code Online (Sandbox Code Playgroud)

但是我需要

<div class="abcdef">
Run Code Online (Sandbox Code Playgroud)

我怎么能"unes​​cape"这个var来删除所有转义字符?

T.J*_*der 51

您可以通过正则表达式和String#replace函数替换反斜杠后跟引号,只需引用:

var x = "<div class=\\\"abcdef\\\">";
x = x.replace(/\\"/g, '"');
document.body.appendChild(
  document.createTextNode("After: " + x)
);
Run Code Online (Sandbox Code Playgroud)

请注意,正则表达式只查找一个反斜杠; 文字中有两个,因为你必须使用反斜杠转义正则表达式文字中的反斜杠(就像在字符串文字中一样).

g在正则表达式的结尾告诉replace整个字符串("全球")工作; 否则,它只会取代第一场比赛.


Ton*_*rix 8

您可以使用JSON.parseunescape 斜杠:

function unescapeSlashes(str) {
  // add another escaped slash if the string ends with an odd
  // number of escaped slashes which will crash JSON.parse
  let parsedStr = str.replace(/(^|[^\\])(\\\\)*\\$/, "$&\\");

  // escape unescaped double quotes to prevent error with
  // added double quotes in json string
  parsedStr = parsedStr.replace(/(^|[^\\])((\\\\)*")/g, "$1\\$2");

  try {
    parsedStr = JSON.parse(`"${parsedStr}"`);
  } catch(e) {
    return str;
  }
  return parsedStr ;
}
Run Code Online (Sandbox Code Playgroud)


Bri*_*tic 5

如果您想删除反斜杠转义,但保留转义的反斜杠,您可以执行以下操作:

"a\\b\\\\c\\\\\\\\\\d".replace(/(?:\\(.))/g, '$1');
Run Code Online (Sandbox Code Playgroud)

结果: ab\c\\d

的解释replace(/(?:\\(.))/g, '$1')

/(?:\\) 是一个非捕获组来捕获前导反斜杠

/(.) 是一个捕获组,用于捕获反斜杠后面的内容

/g 全局匹配:查找所有匹配项,而不仅仅是第一个。

$1 正在引用第一个捕获组的内容(反斜杠后面的内容)。