如何编写正则表达式匹配无分隔符拼接字符串与大小写混合命名文本
正则匹配解决方案
最终可用正则
你可以使用如下组合正则,既兼容原有下划线分隔的拼接字符串匹配逻辑,也能准确匹配无分隔符的大小写/数字混搭拼接字符串,不会误匹配普通纯单词:
^(?:[A-Za-z0-9]+(?:_[A-Za-z0-9]+)+|(?=.*[a-z])(?=.*[A-Z0-9])[A-Za-z0-9]+)$
规则说明
正则用分支逻辑同时覆盖两类匹配场景:
- 第一部分
[A-Za-z0-9]+(?:_[A-Za-z0-9]+)+是你原有已验证的逻辑,专门匹配以下划线为分隔符的拼接文本 - 第二部分是新增的无分隔符拼接字符串匹配逻辑,通过正向预查限定规则,避免误匹配普通单词:
(?=.*[a-z])要求字符串必须包含至少1个小写字母(?=.*[A-Z0-9])要求字符串必须包含至少1个大写字母或数字- 上述两个条件同时满足时,才会匹配无分隔符的字符串,天然排除纯全小写、纯全大写无数字的普通单词
匹配效果验证
- 可正常匹配的目标内容:
- 无分隔符类:
EmployeeID、messageIndex、JOBname、KeyRange、Type21 - 下划线分隔类:
user_id、ORDER_item3、task2_status
- 无分隔符类:
- 不会误匹配的普通单词:
hello(纯小写)、WORLD(纯全大写无数字)
可选调整
如果你需要额外排除纯小写+数字、纯大写+数字的无分隔符字符串,仅匹配大小写交错的驼峰类字符串,可以把第二部分的预查规则调整为(?=.*[a-z])(?=.*[A-Z]),调整后的完整正则如下:
^(?:[A-Za-z0-9]+(?:_[A-Za-z0-9]+)+|(?=.*[a-z])(?=.*[A-Z])[A-Za-z0-9]+)$
内容的提问来源于stack exchange,提问作者Yuri
相关产品推荐
相关产品推荐

