将JavaScript字符串拆分为单词

直到几年前,拆分字符串为单词的常用方法是使用String.prototype.split()。虽然它仍然可以正常工作,但要正确使用它有点麻烦,特别是对于较长的文本。然而,JavaScript提供了一种更简单的方法,它可以为我们处理所有细节 - Intl.Segmenter

使用Intl.Segmenter()构造函数,我们可以为给定的区域设置创建一个分段器,并指定一个特定的粒度。在这种情况下,我们想要将字符串拆分为单词,所以我们将使用word粒度。然后,我们可以使用Intl.Segmenter.prototype.segment()方法将字符串拆分为段。

一个是一个具有一些属性的对象。对于这个任务来说,有趣的属性是segmentisWordLike。前者是实际的段,而后者是一个布尔值,指示该段是否类似于单词。这使我们可以轻松地过滤掉非单词段

将所有内容放在一起,我们可以创建一个函数,使用Intl.Segmenter API将字符串拆分为单词。

const splitIntoWords = (str, locale) =>
  [...new Intl.Segmenter(locale, { granularity: 'word' }).segment(str)].reduce(
    (acc, { segment, isWordLike }) => {
      if (isWordLike) acc.push(segment);
      return acc;
    },
    []
  );

splitIntoWords('I love javaScript!!', 'en-US');
// ['I', 'love', 'javaScript']
splitIntoWords('python, javaScript & coffee', 'en-US');
// ['python', 'javaScript', 'coffee']

[!NOTE]

在撰写本文时(2024年1月),Intl.Segmenter在所有浏览器上的支持并不完美。特别是,Firefox尚未支持,尽管支持似乎就在眼前。在使用它之前,请务必仔细检查兼容性。