让我说我喜欢这个:"\\n"
,我需要将它转换为字符串,就像解释器会这样做:\n
。
这样的简单替换不起作用:
function aaa(s){
return s.replace(/\\n/gm,'\n').replace(/\\\\/gm,'\\');
}
我需要这种行为:
"Line 1\nLine 2"
=&gt; Line 1<Line break>Line 2
"Line 1\\nLine 1"
=&gt; Line 1\nLine1
答案 0 :(得分:2)
最简单,最邪恶的解决方案是写return eval(s)
不要那样做。
相反,您需要使用匹配评估程序进行一次replace
调用,如下所示:
var escapeCodes = {
'\\': '\\',
'r': '\r',
'n': '\n',
't': '\t'
};
return s.replace(/\\(.)/g, function(str, char) {
return escapeCodes[char];
});
(测试)
答案 1 :(得分:1)
感谢SLaks的回答。
以下是最终代码:
(function(self,undefined){
var charMappings = {
'\\': '\\',
'r': '\r',
'n': '\n',
't': '\t',
'b': '\b',
'&': '\&'
};
var rg=(/\\(.|(?:[0-7]{3})|(?:x[0-9a-fA-F]{2})|(?:u[0-9a-fA-F]{4}))/gm);
self.mapString=function(s){
return s.replace(rg, function(str, ch) {
switch(ch.length){
case 1:
return charMappings.hasOwnProperty(ch)?charMappings[ch]:ch;
case 2:
case 4:
return String.fromCharCode(parseInt(ch,16));
case 3:
return String.fromCharCode(parseInt(ch,8));
}
});
}
})(window);