如何使用正则替换连续2个及以上空格,每个空格对应替换为指定字符
原代码问题分析
你编写的myStr.replace(/ +{2,}/g, '-')存在两处问题:
- 正则语法错误:
+本身表示匹配前一个字符1次及以上,叠加{2,}属于非法的量词组合,就算修正为/ {2,}/g,逻辑也存在问题 - 替换逻辑不符:修正语法后的正则会将一整段连续的空格整体替换为1个
-,无法做到每个空格对应替换为1个-的效果
正确实现方案
方案1:替换回调实现(兼容性最优,推荐使用)
利用replace方法的回调参数,匹配到连续2个及以上的空格后,根据匹配到的空格长度生成等长的-进行替换:
const myStr = "I love to eat cake" const result = myStr.replace(/ {2,}/g, match => '-'.repeat(match.length)) // 输出结果:I love---to eat----cake
方案2:零宽断言实现
通过零宽断言直接匹配所有属于连续空格序列中的单个空格,逐个替换为-:
const result = myStr.replace(/(?<= ) | (?= )/g, '-')
内容的提问来源于stack exchange,提问作者dataviews
相关产品推荐
相关产品推荐

