【问题标题】:String Split With Unicode使用 Unicode 分割字符串
【发布时间】:2015-06-22 21:51:57
【问题描述】:

首先我一直在网上搜索这个解决方案。

如何:

<''.split('');

> ['','','']

简单地表达我想做的事。但也适用于其他 Unicode 字符,如便便。

【问题讨论】:

  • 我有点困惑。 ''.split(''); 似乎对我有用:["", "", ""]
  • 我以前读过关于便便测试的内容。 mathiasbynens.be/notes/javascript-unicode 有一个很好的解释。关键是???有一个高于 U+FFFF 的代码点,并使用 2 个字节和 UTF-16 编码。
  • 如果你想要一个函数 '????????'.split(''); 返回['????', '????'] 你应该编辑你的问题。

标签: javascript unicode


【解决方案1】:

正如JavaScript has a Unicode problem 中所解释的,在 ES6 中,您可以通过使用新的 ... 扩展运算符很​​容易地做到这一点。这会导致字符串迭代器(另一个新的 ES6 特性)在内部使用,并且因为该迭代器旨在处理代码点而不是 UCS-2/UTF-16 代码单元,所以它可以按照您想要的方式工作:

console.log([...'??']);
// → ['?', '?']

在这里试试:https://babeljs.io/repl/#?experimental=true&evaluate=true&loose=false&spec=false&code=console.log%28%0A%20%20%5B%2e%2e%2e%27%F0%9F%92%A9%F0%9F%92%A9%27%5D%0A%29%3B

更通用的解决方案:

function splitStringByCodePoint(string) {
  return [...string];
}

console.log(splitStringByCodePoint('??'));
// → ['?', '?']

【讨论】:

  • 现在我所要做的就是等待它成为跨浏览器的标准。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 难道没有正则表达式来处理这种情况吗?
  • @L2L2L 实际上,你没有。只需在 ES6 中编写代码并在部署之前使用 Babel.js(我链接到它)进行转译。这样即使在 ES5 环境中也能正常工作。
  • 感谢大家的建议。感谢@Mathias Bynens 的回复。
【解决方案2】:

for ... of 可以循环遍历包含 unicode 字符的字符串,

let string = "?????????????"
for(var c of string)
    console.log(c);

【讨论】:

    【解决方案3】:

    上述解决方案适用于简单的表情符号,但不适用于扩展集的表情符号和使用Surrogate Pairs的表情符号

    例如:

    splitStringByCodePoint("❤️")
    // Returns: [ "❤", "️" ]
    

    要正确处理这些情况,您需要一个专门构建的库,例如:

    https://github.com/dotcypress/runes

    https://github.com/essdot/spliddit

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-08
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 2012-06-01
      相关资源
      最近更新 更多