How to remove backslash escaping from a javascript var?

You can use JSON.parse to unescape slashes:

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 ;
}

You can replace a backslash followed by a quote with just a quote via a regular expression and the String#replace function:

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

Note that the regex just looks for one backslash; there are two in the literal because you have to escape backslashes in regular expression literals with a backslash (just like in a string literal).

The g at the end of the regex tells replace to work throughout the string ("global"); otherwise, it would replace only the first match.


If you want to remove backslash escapes, but keep escaped backslashes, here's what you can do:

"a\\b\\\\c\\\\\\\\\\d".replace(/(?:\\(.))/g, '$1');

Results in: ab\c\\d.

Explanation of replace(/(?:\\(.))/g, '$1'):

/(?:\\) is a non-capturing group to capture the leading backslash

/(.) is a capturing group to capture what's following the backslash

/g global matching: Find all matches, not just the first.

$1 is referencing the content of the first capturing group (what's following the backslash).