如何用JavaScript正则实现含缩写的连写大写单词间加空格?
解决驼峰式字符串分割问题:处理连续大写字母场景
你的正则表达式/([A-Z][a-z]*)([A-Z]*)/g能处理普通的驼峰/帕斯卡命名(比如DerivateASK→Derivate ASK),但遇到连续大写字母后面紧跟大写+小写的组合时(比如ASKAnalysis)就失效了——因为它把连续的大写字母当成了一个整体,没在ASK和Analysis之间插入空格。
正确的正则表达式方案
const formatString = (s) => s.replace(/([a-z])([A-Z])|([A-Z])([A-Z][a-z])/g, '$1$3 $2$4').trim();
正则逻辑解释
这个正则包含两个匹配分支,覆盖了所有需要插入空格的场景:
([a-z])([A-Z]):匹配「小写字母 + 大写字母」的组合(比如Derivate的末尾e和ASK的开头A),替换时在两者之间加空格。([A-Z])([A-Z][a-z]):匹配「大写字母 + 大写字母+小写字母」的组合(比如ASK的末尾K和Analysis的开头A,因为A后面跟着小写的nalysis),替换时在这两个大写字母之间加空格。
测试验证
- 输入
DerivateASK→ 输出Derivate ASK(符合预期) - 输入
LiquidASKAnalysis→ 输出Liquid ASK Analysis(完美解决你的问题) - 额外测试:
HelloWORLDTest→Hello WORLD Test;ABCDefGHIJklm→ABC Def GHIJ klm
内容的提问来源于stack exchange,提问作者Elitenoob
相关产品推荐
相关产品推荐

