如何unescape JavaScript字符串文字值?

时间:2016-02-23 14:14:32

标签: javascript regex

我使用来解析代码(使用ES解析器,例如Esprima,不是技术环境限制的选项)。

主题代码(正在解析的代码是):

(function() {
    $('#3bf779cd').replaceWith("<div class=\'shows\'>\n<\/div>");

    window.fadeItems();
}).call(this);

我感兴趣的值是replaceWith的第一个参数,它是一个字符串文字。我使用正则表达式获取此变量:

const subjectValue = subjectCode.match(/\.replaceWith\(((["'])(?:(?=(\\?))\3.)*?\2)/m)[1].slice(1, -1);

console.log(subjectValue);

这个输出是:

<div class=\'shows\'>\n<\/div>

如何以输出的方式转义subjectValue

<div class='shows'>
</div>

简单地使用unescape无效。

如果我没有弄错的话,问题就在于如何摆脱这个价值:

console.log('"<div class=\\\'shows\\\'>\\\\n<\\\/div>"');

2 个答案:

答案 0 :(得分:2)

您正在寻找eval(是的,您没听错):

&#13;
&#13;
text = document.querySelector('script').textContent;

dqString = /"(\\.|[^"])*"/g

s = text.match(dqString)[0]

raw = eval(s);

alert(raw);
&#13;
<script>
(function() {
    $('#3bf779cd').replaceWith("<div class=\'shows\'>\n<\/div>");
    window.fadeItems();
});
</script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

最愚蠢的方式是。

"<div class=\\'shows\\'>\\\\n<\\/div>".replace(/\\n/g, '').replace(/\\/g, '');
// "<div class='shows'></div>"

更聪明的方法是首先进行unescape \ n而不是检查正则表达式是否有未转义的匹配,而不是逃避它们。