javascript
  • arrays
  • regex
  • parsing
  • escaping
  • 2015-10-16 67 views 0 likes 
    0

    我正在尝试编写一个函数,它接受一个组成字符串的字符数组(包括开始和结束''')并返回组成字符串的字符串阵列从一个字符数组中创建一个字符串来解释转义字符

    例如输入/输出:

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

    或:

    EDIT(澄清无效阵列为例):

    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 我试图创造一些像克罗克福德并解析与子功能的字符串,除非我想利用输入的当前状态,并将其转换为一个数组,并解析它通过数组元素。

    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"); 
        }, 
    
    +1

    你为什么不使用'join'? ....'input.join(“”)' –

    +0

    你想隐藏数组到字符串还是字符串? –

    +0

    @WashingtonGuedes [console run](http://screencloud.net/v/Ac3R)? –

    回答

    0

    要剥离出转义字符,你需要使用字符串的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" 
    
    +0

    是的,我只是为它创建了一个函数。 –

    相关问题