如何以编程方式创建双重转义?

时间:2015-02-11 00:21:01

标签: javascript regex string

我有一个带转义字符的字符串:

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";

这不起作用。字符串保持不变,就像没有执行替换一样。

有什么建议吗?

2 个答案:

答案 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>