我有这个var
var x = "<div class=\\\"abcdef\\\">";
哪个是
<div class=\"abcdef\">
但我需要
<div class="abcdef">
如何“取消”此var以删除所有转义字符?
答案 0 :(得分:45)
您可以通过正则表达式和String#replace
函数替换反斜杠后跟报价的引号:
var x = "<div class=\\\"abcdef\\\">";
x = x.replace(/\\"/g, '"');
document.body.appendChild(
document.createTextNode("After: " + x)
);
请注意,正则表达式只查找一个反斜杠;文字中有两个,因为你必须使用反斜杠在正则表达式文字中转义反斜杠(就像在字符串文字中一样)。
正则表达式末尾的g
告诉replace
在整个字符串中工作(“全局”);否则,它只会取代第一场比赛。
答案 1 :(得分:2)
试试这个:
x = x.replace(/\\/g, "");
答案 2 :(得分:1)
var x = "<div class=\\\"abcdef\\\">";
alert(x.replace(/\\/gi, ''));
答案 3 :(得分:1)
您可以使用JSON.parse
来减少斜线:
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(/(^|[^\\])(\\\\)*\\$/, "$&\\");
try {
parsedStr = JSON.parse(`"${parsedStr}"`);
} catch(e) {
return str;
}
return parsedStr ;
}
答案 4 :(得分:0)
'<div class=\\\"abcdef\\\">'.replace(/\\\"/g, '"')
其他答案你删除所有反斜杠,你只想删除那些引号。
答案 5 :(得分:0)
如果要删除反斜杠转义符,但要保留转义的反斜杠,则可以执行以下操作:
"a\\b\\\\c\\\\\\\\\\d".replace(/(?:\\(.))/g, '$1');
结果:
ab\c\\d
。
replace(/(?:\\(.))/g, '$1')
的解释:
/(?:\\)
是一个非捕获组,用于捕获前导反斜杠
/(.)
是一个捕获组,用于捕获反斜杠之后的内容
/g
全局匹配:查找所有匹配,而不仅仅是第一个。
$1
引用了第一个捕获组的内容(反斜杠后面是什么)。
答案 6 :(得分:-3)
你需要有一个反斜杠而不是三个。
像这样:
var x = "<div class=\"abcdef\">";
答案 7 :(得分:-4)
让我提出这个变种:
function un(v) { eval('v = "'+v+'"'); return v; }
此功能不会简单地删除斜杠。文本编译为代码,如果输入正确,您可以获得任何转义序列的非转义结果。