正则表达式用单个空格替换多个空格

新手上路,请多包涵

给定一个字符串,如:

---0---

可以使用哪种 jQuery 或 JavaScript 魔法来将空格保持在最大一个空格?

目标:

---1---

原文由 AnApprentice 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

鉴于您还想覆盖制表符、换行符等,只需将 \s\s+ 替换为 ' '

 string = string.replace(/\s\s+/g, ' ');

如果您真的只想覆盖空格(因此不包括制表符、换行符等),请这样做:

 string = string.replace(/ +/g, ' ');

原文由 BalusC 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于您似乎对性能感兴趣,因此我使用萤火虫对这些进行了分析。这是我得到的结果:

 str.replace( /  +/g, ' ' )       ->  380ms
str.replace( /\s\s+/g, ' ' )     ->  390ms
str.replace( / {2,}/g, ' ' )     ->  470ms
str.replace( / +/g, ' ' )        ->  790ms
str.replace( / +(?= )/g, ' ')    -> 3250ms

这是在 Firefox 上运行 100k 字符串替换。

如果您认为性能是个问题,我鼓励您使用 firebug 进行自己的分析测试。众所周知,人类不善于预测程序中的瓶颈所在。

(另请注意,IE 8 的开发人员工具栏还内置了一个分析器——可能值得检查一下 IE 中的性能。)

原文由 Edward Loper 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题