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

JavaScript - how to build string with escape character?

本文关键字:构建 字符串 转义字符 何使用 JavaScript      更新时间:2023-09-26

我正在编写要使用Windows Script Host运行的JScript

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

s1 = ''n'

我想用两个单独的字符构建s2' & n天真我想做:

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

但这当然会导致s1 != s2

我可以以与s1具有相同解释含义的方式构建s2吗?

例:

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

我希望两个WScript.Echo()打印完全相同的东西。

注意

我很清楚这个问题似乎完全是愚蠢的。如果我在不知道所有细节的情况下阅读它,我可能会这样想。我不希望任何人理解目的.只是好奇看看这是否可行,或者我需要重新考虑整个事情。

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

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

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

我仍然不清楚你到底想完成什么。 但是,如果你说你有一些像var s1 = ''n'r't';这样的任意字符串,并且你想从中生成文字字符串"'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,并将s1中存储"q"值,并且在处理时无法判断原始源字符串中是否有虚假')。

除了解决您尝试使用这种"取消解析字符串"方法解决的任何潜在问题之外,可能还有更好的选择。

我今天实际上需要这样做。特别是,我需要它来构建形式的八进制和十六进制转义序列 'x39'123 .

我正在使用的方法只是使用eval

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

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

var str = String.fromCharCode(parseInt('39', 16))