简体   繁体   English

转义字符串拆分和连接

[英]Escaped string split & join

Similar to String split & join , but for Javascript: String split&join类似,但对于Javascript:

I have an Array of strings. 我有一个字符串数组。 I need to be able to join the items into one string and afterwards split that string again to get the original string collection. 我需要能够将项目连接成一个字符串,然后再次拆分该字符串以获取原始字符串集合。 However, each string may contain the joining string as well, so I'll have to do some escaping. 但是,每个字符串也可能包含连接字符串,因此我将不得不进行一些转义。 Are there any recipes on how to achieve that? 有没有关于如何实现这一目标的方法?

Here is an example: 这是一个例子:

serialized = ["Hello", ",", "World"].join(",") # Nice would be "Hello,\,,World"

But

serialized.split(",")

returns ["Hello", "", "", "World"] instead of ["Hello", ",", "World"] 返回["Hello", "", "", "World"]而不是["Hello", ",", "World"]

You can use JSON.stringify() and JSON.parse() instead. 您可以使用JSON.stringify()JSON.parse()代替。

JSON.stringify(["Hello", ",", "World"]) // -> '["Hello",",","World"]'
JSON.parse('["Hello",",","World"]') // -> ["Hello", ",", "World"]

Doing it manually I came up with this, in case anyone ever stumbles on this again ;) 手动完成,我想出了这个,万一有人再偶然发现这个;)

splitAndUnescape = function(character, str, opt_escapeChar) {
  var result = [];
  var escapeChar = opt_escapeChar || '\\';
  var tmp = '';
  for (var index = 0; index < str.length; index++) {
    var ch = str.charAt(index);
    if (ch == escapeChar) {
      ch = str.charAt(++index);
    } else if (ch == character) {
      result.push(tmp);
      tmp = '';
      continue;
    }
    tmp += ch;
  }
  if (tmp || result.length) {
    result.push(tmp);
  }
  return result;
};

escapeAndJoin = function(character, array, opt_escapeChar) {
  var escapeChar = opt_escapeChar || '\\';
  var reEscape = new RegExp('(\\' + character + '|\\' + escapeChar + ')', 'g');
  var out = [];
  for (var index = 0; index < array.length; index++) {
    out.push(array[index].replace(reEscape, escapeChar + '$1'));
  }
  return out.join(character);
};

PoC: 的PoC:

serialized = escapeAndJoin(",", ["Hello", ",", "World"]); # -> "Hello,\,,World"
splitAndUnescape(",", serialized) # -> ["Hello", ",", "World"]

Use a specific character (or sentence) to join and split. 使用特定字符(或句子)加入和拆分。

By example : 举例:

["Hello", "," ,"World"].join("*$%").split("*$%")

will return : 将返回 :

["Hello", "," ,"World"]

Just don't use a common character to split & join 只是不要使用常用字符来拆分和加入

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM