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)
我怎么能"unescape"这个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整个字符串("全球")工作; 否则,它只会取代第一场比赛.
您可以使用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)
如果您想删除反斜杠转义,但保留转义的反斜杠,您可以执行以下操作:
"a\\b\\\\c\\\\\\\\\\d".replace(/(?:\\(.))/g, '$1');
Run Code Online (Sandbox Code Playgroud)
结果:
ab\c\\d。
的解释replace(/(?:\\(.))/g, '$1'):
/(?:\\) 是一个非捕获组来捕获前导反斜杠
/(.) 是一个捕获组,用于捕获反斜杠后面的内容
/g 全局匹配:查找所有匹配项,而不仅仅是第一个。
$1 正在引用第一个捕获组的内容(反斜杠后面的内容)。
| 归档时间: |
|
| 查看次数: |
60793 次 |
| 最近记录: |