如何将字符串拆分为含单词与标点的数组(兼容波兰语字符)
解决方案
可以通过逐个字符遍历+分类处理的方式实现,完全不需要正则表达式,天然兼容波兰语等带特殊字符的语言,具体实现如下:
const sentence = 'I have a brother, sister, a dog, and a cat.'; const result = []; let currentWord = ''; // 定义需要单独拆分的标点集合,可按需扩展 const punctuation = new Set([',', '.', '!', '?', ';', ':']); for (const char of sentence) { if (char === ' ') { // 遇到空格,提交当前已构建的单词(如果存在) if (currentWord) { result.push(currentWord); currentWord = ''; } } else if (punctuation.has(char)) { // 遇到标点,先提交当前单词,再单独添加标点 if (currentWord) { result.push(currentWord); currentWord = ''; } result.push(char); } else { // 普通字符(包括波兰语特殊字母),加入当前单词 currentWord += char; } } // 处理遍历结束后剩余的单词 if (currentWord) { result.push(currentWord); } console.log(result);
说明
- 核心逻辑是区分三类字符:空格、需要拆分的标点、普通字符(含波兰语
ąęćłńóśźż等特殊字母),分别做对应处理; - 用
Set存储标点是为了快速判断,你可以根据需求自行扩展标点集合; - 遍历结束后额外检查剩余单词,避免遗漏字符串末尾的单词(如果字符串最后不是标点的话);
- 该方法不会破坏任何语言的特殊字符,因为只有空格和指定标点会触发拆分,其余字符都会被保留在单词中。
内容的提问来源于stack exchange,提问作者Fudal96
相关产品推荐
相关产品推荐

