使用JavaScript正则表达式正确拆分驼峰字符串的实现方法
问题原因
你现有代码的正则匹配逻辑每次仅捕获单个大写字母开头的片段,导致连续大写字母会被拆分为多个独立条目,不符合连续大写作为一个整体的拆分需求。
修复后的实现
CamelCaseSplit = (inputString) => { const f = str => str.match(/[A-Z]+(?=[A-Z][a-z])|[A-Z][a-z0-9]*|[^A-Z]+/g).join(' <CAMEL> '); return f(inputString); }
正则规则说明
[A-Z]+(?=[A-Z][a-z]):匹配连续大写字母片段,仅当该片段后紧跟「大写+小写」的组合时生效,用于提取ABCWord里的ABC这类前缀连续大写内容[A-Z][a-z0-9]*:匹配单个大写字母开头,后续跟小写字母/数字的片段,用于提取De、F123、Word这类片段[^A-Z]+:匹配开头所有非大写字母组成的前缀片段,用于提取abc、camel、number1这类小写/数字开头的内容
效果验证
| 输入值 | 输出值 | 是否符合预期 |
|---|---|---|
ABCWordDEF | ABC <CAMEL> Word <CAMEL> DEF | 是 |
abcDeF123 | abc <CAMEL> De <CAMEL> F123 | 是 |
camelCase | camel <CAMEL> Case | 是 |
simple | simple | 是 |
number1Case2 | number1 <CAMEL> Case2 | 是 |
内容的提问来源于stack exchange,提问作者Exploring
相关产品推荐
相关产品推荐

