JavaScript正则过滤特殊字符后多余空格处理与字符串拆分问题
问题原因
你的代码存在两个核心问题:
- 正则匹配到连续多个需要剔除的字符时,每个字符都会被替换为1个空格,最终产生连续的多个空格,按单个空格拆分后自然会生成空字符串项
- 没有对替换后的连续空格做合并处理,也没有过滤拆分结果里的空值
修复方案
有两种常用实现方式,均可达到预期效果:
方案1:合并连续空格后再拆分
先替换特殊字符为空格,合并连续空格、去除首尾空格后再拆分:
const input = 'this is a signal , entry : 24.30 and side is short'; // 替换特殊字符为空格 → 合并连续空格 → 去除首尾空格 → 转大写 const text = input.replace(/\.(?!\d)|[^\w.]/g, " ") .replace(/\s+/g, " ") .trim() .toUpperCase(); console.log(text.split(" "))
方案2:拆分后直接过滤空项
不想额外加正则处理空格的话,可以拆分后直接过滤所有空字符串:
const input = 'this is a signal , entry : 24.30 and side is short'; const text = input.replace(/\.(?!\d)|[^\w.]/g, " ").toUpperCase(); // 过滤空字符串项 const result = text.split(" ").filter(item => item); console.log(result)
两种方案的输出均和你预期一致:
[ 'THIS', 'IS', 'A', 'SIGNAL', 'ENTRY', '24.30', 'AND', 'SIDE', 'IS', 'SHORT' ]
内容的提问来源于stack exchange,提问作者dumpAndDie
相关产品推荐
相关产品推荐

