如何使用JavaScript Regex仅移除数字间破折号两侧空格且不影响字符串场景
字符串破折号空格清理方案
问题原因
最初的正则未生效是因为Excel自动将普通半角短破折号转换为了长破折号(en dash/em dash),正则里仅匹配半角短破折号自然无法命中目标内容。
可用解决方案
使用兼容多类型破折号的正则即可覆盖场景,同时可适配破折号两侧可能存在的多空格、制表符等空白内容:
item = item.replace(/(\d)\s*[-\u2013\u2014]\s*(\d)/g, '$1-$2');
正则规则说明
(\d):匹配破折号左侧的数字,捕获为分组1\s*:匹配0个或多个空白字符,兼容单空格、多空格、制表符等场景[-\u2013\u2014]:匹配三种常见破折号:普通半角短横-、en dash–(U+2013,Excel默认转换的长破折号类型)、em dash—(U+2014,全角长破折号)(\d):匹配破折号右侧的数字,捕获为分组2- 替换结果
$1-$2:将捕获的两个数字用标准半角短横直接连接,移除中间所有空白和原破折号
效果验证
- 输入
10 - 89 - 90→ 输出10-89-90,符合预期 - 输入
A - Z→ 两侧无数字不匹配,保持原格式 - 输入
90 - older→ 右侧为非数字不匹配,保持原格式 - 输入
123 – 456(Excel转换后的长破折号版本)→ 输出123-456,兼容生效
内容的提问来源于stack exchange,提问作者coopersita
相关产品推荐
相关产品推荐

