从占转义字符的字符数组创建字符串

Creating a string from an array of characters accounting for escape characters

本文关键字:数组 创建 字符串 字符 转义字符      更新时间:2023-09-26

我正在尝试编写一个函数,该函数接受组成字符串的字符数组(包括开始和结束'"')并返回组成该数组的字符串。

输入/输出示例:

input = ['"', 'h', 'e', 'l', 'l', 'o', ' ', 't', 'h', 'e', 'r', 'e', '"'];
output = "hello there";

或:

编辑(澄清无效数组示例):

var str = '"''''''"''"x''""'
JSON.parse(str);  // returns "''"'"x'""
// I want my function to work the same way but after converting the str to an array
var array = str.split("");

现在我有以下内容:

var makeString = function(array){
    var result = "";
    var arr = string.split('');
    var runner = true;
    var i = 1;
    while (arr[i]){
       // This if statement doesn't work, but it is intended to 
       // account for any double quotes inside the string
        if (arr[i] === '"' && arr[i-1] !== ''''){
            return result;
        }
        result += arr[i];
        i++;
    }
};

我的函数没有真正工作,但我也需要它来解释转义字符和'r 'n 't等的所有使用(我首先不太理解)。

编辑/添加:从https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js我试图创建像crockford那样的东西,用子函数解析字符串,除了我想获取输入的当前状态并将其转换为数组并通过数组元素解析它。

    string = function () {
// Parse a string value.
        var hex,
            i,
            string = '',
            uffff;
// When parsing for string values, we must look for " and ' characters.
        if (ch === '"') {
            while (next()) {
                if (ch === '"') {
                    next();
                    return string;
                }
                if (ch === '''') {
                    next();
                    if (ch === 'u') {
                        uffff = 0;
                        for (i = 0; i < 4; i += 1) {
                            hex = parseInt(next(), 16);
                            if (!isFinite(hex)) {
                                break;
                            }
                            uffff = uffff * 16 + hex;
                        }
                        string += String.fromCharCode(uffff);
                    } else if (typeof escapee[ch] === 'string') {
                        string += escapee[ch];
                    } else {
                        break;
                    }
                } else {
                    string += ch;
                }
            }
        }
        error("Bad string");
    },

要去掉转义字符,需要使用字符串的replace函数并接受一个正则表达式作为参数

function arrayToString(array) {
    return array.join('').replace(/['''"]/g, "")
}
测试用例

var input = ['"', 'h', 'e', 'l', 'l', 'o', ' ', 't', 'h', 'e', 'r', 'e', '"'];
arrayToString(input)
=> "hello there"