1

String split & joinに似ていますが、Javascript の場合:

文字列の配列があります。項目を 1 つの文字列に結合し、その後その文字列を再度分割して、元の文字列コレクションを取得できるようにする必要があります。ただし、各文字列には結合文字列も含まれている可能性があるため、エスケープを行う必要があります。それを達成する方法に関するレシピはありますか?

以下に例を示します。

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

しかし

serialized.split(",")

["Hello", "", "", "World"]の代わりに戻ります["Hello", ",", "World"]

4

2 に答える 2

3

JSON.stringify()代わりにandを使用できますJSON.parse()

JSON.stringify(["Hello", ",", "World"]) // -> '["Hello",",","World"]'
JSON.parse('["Hello",",","World"]') // -> ["Hello", ",", "World"]
于 2013-02-05T13:20:17.213 に答える
2

手動で行うと、誰かが再びこれに出くわした場合に備えて、これを思いつきました;)

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);
};

概念実証:

serialized = escapeAndJoin(",", ["Hello", ",", "World"]); # -> "Hello,\,,World"
splitAndUnescape(",", serialized) # -> ["Hello", ",", "World"]
于 2013-02-05T14:53:25.367 に答える