我有一个带转义字符的字符串:
var a = "Hello\ World";
我想将字符串拆分为包含转义字符的字符数组:
var a = "Hello\ World";
/* Do something here */
a; // I want output: ["H","e","l","l","o","\"," ","W","o","r","l","d"]
通常我使用以下方法分割字符串:
a=a.split('');
但当然这不起作用,因为在拆分过程中会忽略转义字符。
var a = "Hello\ World";
a=a.split('');
a; // outputs ["H","e","l","l","o"," ","W","o","r","l","d"]
现在我知道为了得到我想要的结果,我必须使用双逃生。我知道我的字符串应该是这样的:
var a = "Hello\\ World";
但这不是我的字符串,我没有手动输入字符串而是生成它。所以我完全理解我需要一个双重逃脱,但我不能手动创建一个。我需要知道如何以编程方式将"Hello\ World"
转换为"Hello\\ World"
。
是否有一些神奇的功能可以逃脱所有反斜杠?是否有doubleEscape()
函数我不知道,或者可能有一些正则表达式替换函数可以帮助我。
我不想答案"使用双重逃脱"或者"你的字符串必须是'Hello \ World'。我完全清楚这是我需要做的,但我需要以编程方式逃避转义字符,它不能手动完成。
我尝试过这样的事情:
var a = "Hello\ World";
a = a.replace("\", "\\");
但当然这不起作用,因为在替换期间忽略了转义字符。我尝试过这样的事情:
var a = "Hello\ World";
a = a.replace("\\", "\\\\");
但这会产生错误。我相信它将搜索参数解释为正则表达式,这是一个无效的正则表达式,会导致错误。
另一篇类似的帖子暗示了这一点:
var a = "Hello\ World";
a = a.replace(/\\/g, '\\\\');
a; // outputs "Hello World";
这不起作用。字符串保持不变,就像没有执行替换一样。
有什么建议吗?
答案 0 :(得分:4)
split
中忽略反斜杠。
相反,问题是反斜杠不在字符串中:
"Hello\ World"; // "Hello World"
因此,一旦解析了字符串文字,就无法恢复斜杠。
然而,ECMAScript 6引入了template strings。使用String.raw
,您可以恢复原始字符串形式:
`Hello\ World`; // "Hello World"
String.raw`Hello\ World`; // "Hello\ World"
答案 1 :(得分:0)
我试过这个方法: 我运行了你的代码和变体。为了解决逃避反冲的问题,我通过测试CharCode来自己完成这个功能。 函数输出是index = 5,如预期的那样。
function f(x) {
var a = -1,i,n=x.length;
for(i=0;i<n;i++)
{
if(x.charAt(i)==String.fromCharCode(92))
{
a=i;
break;
}
}
return a.toString();
}
function h(x) {
document.getElementById('in').innerHTML = x;
document.getElementById('out').innerHTML = f(x);
}
<button type="button"
onclick="h('Hello\\ World')">
Run</button>
<p id="in"></p>
<hr>
<p id="out"></p>