JavaScript正则表达式:含特殊字符与变音符号的句子分词需求
在JavaScript中正确拆分句子为单词与独立特殊字符
你的问题核心在于原正则的\b(单词边界)仅支持ASCII字符,无法正确识别Unicode变音符号,同时也没处理特殊字符的单独拆分需求。要解决这个问题,用match配合Unicode兼容的正则比split更直接可靠。
解决方案代码
const sentence = "This is: dragée/ (my) test? one sentence."; const tokens = sentence.match(/[\p{L}\p{M}]+|[^\p{L}\p{M}\s]/gu); console.log(tokens); // 输出: ['This', 'is', ':', 'dragée', '/', '(', 'my', ')', 'test', '?', 'one', 'sentence', '.']
正则逻辑解释
[\p{L}\p{M}]+:匹配一个或多个Unicode字母(\p{L})和标记字符(\p{M}),确保带变音符号的单词(比如dragée)被完整识别,不会被拆分。|:逻辑或,匹配两种规则之一。[^\p{L}\p{M}\s]:匹配任意非字母、非标记、非空白的单个字符,保证每个特殊符号(:,/,(等)都被单独拆分出来。g:全局匹配,遍历整个字符串找到所有符合规则的内容。u:启用Unicode模式,让正则正确解析非ASCII字符(比如变音符号、特殊语言字母)。
扩展说明
如果需要把数字也纳入“单词”范畴,只需在正则的单词匹配部分加入\p{N}(Unicode数字):
const tokensWithNumbers = sentence.match(/[\p{L}\p{M}\p{N}]+|[^\p{L}\p{M}\p{N}\s]/gu);
内容的提问来源于stack exchange,提问作者devVue123
相关产品推荐
相关产品推荐

