我正在寻找一个正则表达式来输出大写和小写的不同单词。
示例字符串:DFBPokal
我目前的解决方案:
str.replace(/([a-z])([A-Z])/g, "$1 $2");
当确实存在像'HiAgain'这样的问题时它确实解决了这个问题,但是当它'HIAgain'时却没有解决问题。
如何在一个大写单词至少> 2个字符长的条件下使其工作,它将其标识为要输出为var的单词 - $ 1或$ 2.
答案 0 :(得分:2)
你可以替换
/([A-Z]+)(?=[A-Z][a-z])/g
使用:$1
将“HIAgain”分为“HI Again”。
'DFBPokal'.replace(/([A-Z]+)(?=[A-Z][a-z])/g, "$1 ");
// "DFB Pokal"
它基本上选择大写字母,直到大写字母后跟小写字母。
如果您想捕获这两种情况,可以替换:
/([A-Z]+)(?=[A-Z][a-z])|([a-z])(?=[A-Z])/g
使用$1$2
- Example Here
结果:
"HIAgain" -> "HI Again"
"HiAgain" -> "Hi Again"
"DFBPokal" -> "DFB Pokal"
答案 1 :(得分:0)
最简单的解决方案是使用/([a-z]|[A-Z]+)([A-Z])/g
而不是正则表达式:
'HIAgain'.replace(/([a-z]|[A-Z]+)([A-Z])/g, "$1 $2"); -> 'HI Again'
'ABBRWord'.replace(/([a-z]|[A-Z]+)([A-Z])/g, "$1 $2"); -> 'ABBR Word'
这个想法是将除了最后一个大写字母之外的所有大写字母视为合法的前一个字。