将JavaScript字符串拆分为单词
直到几年前,拆分字符串为单词的常用方法是使用String.prototype.split()
。虽然它仍然可以正常工作,但要正确使用它有点麻烦,特别是对于较长的文本。然而,JavaScript提供了一种更简单的方法,它可以为我们处理所有细节 - Intl.Segmenter
。
使用Intl.Segmenter()
构造函数,我们可以为给定的区域设置创建一个分段器,并指定一个特定的粒度。在这种情况下,我们想要将字符串拆分为单词,所以我们将使用word
粒度。然后,我们可以使用Intl.Segmenter.prototype.segment()
方法将字符串拆分为段。
一个段是一个具有一些属性的对象。对于这个任务来说,有趣的属性是segment
和isWordLike
。前者是实际的段,而后者是一个布尔值,指示该段是否类似于单词。这使我们可以轻松地过滤掉非单词段。
将所有内容放在一起,我们可以创建一个函数,使用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尚未支持,尽管支持似乎就在眼前。在使用它之前,请务必仔细检查兼容性。