JavaScript - 如何使用转义字符构建字符串?

时间:2014-12-14 10:26:39

标签: javascript string escaping jscript wsh

我正在编写JScript以使用Windows Script Host运行。

假设我有一个简单的字符串变量:

s1 = '\n'

我想从两个独立的字符构建s2\& n天真地我想这样做:

s2 = '';
s2 += '\\';
s2 += 'n'; 

但这当然会导致s1 != s2

我能否以s2具有相同解释含义的方式构建s1

实施例

WScript.Echo("1\n2")
var s;
s += '1';
s += '\\';
s += 'n';
s += '2';
WScript.Echo(s)

我希望WScript.Echo()同时打印完全相同的内容。

注意

我很清楚这个问题似乎完全是愚蠢的。我可能会认为在不知道所有细节的情况下我也读过它。我不希望任何人理解目的。只是想知道它是否可行还是我需要重新考虑整个事情。

4 个答案:

答案 0 :(得分:3)

您不能通过附加直接构建它,但是您可以在其中使用包含转义序列的字符串并将其解析为包含转义字符的字符串。在这种情况下,您可能会使用JSON.parse

var s1 = '\n',
    s2 = '' + '\\' + 'n'; // '\\n'
console.log(s1 == JSON.parse('"' + s2 + '"')) // true

答案 1 :(得分:2)

你不能,这是不可能的。您不能将两个或多个字符连接在一起以产生一个字符,这就是\n。它是一个包含一个单个字符的字符串。

答案 2 :(得分:0)

我仍然不清楚你实际上想要完成什么。但是,如果您说您有一些像var s1 = '\n\r\t';这样的任意字符串,并且您希望从中生成 literal 字符串"\n\r\t",那么当您解析时字面值你得到一个等于原始字符串的结果,也许你可以尝试这样的事情:

window.specialChars = {
    8: "\\b",       //backspace
    9: "\\t",       //tab
    10: "\\n",      //newline
    12: "\\f",      //form-feed
    13: "\\r",      //carriage return
    39: "\\'",      //single-quote
    92: "\\\\"      //literal backslash  
};

function escapedString(source) {
    if (! source) {
        return undefined;
    }

    var result = "";
    for (var index = 0; index < source.length; index++) {
        var code = source.charCodeAt(index);
        result += specialChars[code] ? specialChars[code] : String.fromCharCode(code);
    }

    return result;
};

http://jsfiddle.net/L4L16xwu/3/

当然,您可能会遇到许多问题。特别是如果您的源字符串可能包含非ASCII字符或虚假转义序列(例如,var s1 = '\q';是有效的JavaScript,并且会在"q"中存储s1的值,并且在处理那些& #39;无法判断原始源字符串中是否存在虚假\

可能有一个更好的替代方案来解决你试图解决的任何潜在问题&#34;解开字符串&#34;做法。

答案 3 :(得分:0)

我实际上今天有必要这样做。特别是,我需要它来构建int 21 int 0 boolean false boolean false \x39形式的八进制和十六进制转义序列。

我使用的方法只是使用\123

eval

这是一个合理的通用解决方案。对于八进制和十六进制代码,最好将字符串解析为int,然后从中构建一个字符串

var str = eval('"\\x' + '3' + '9' +'"') // str === "9"