javascript - 正则表达式大写分隔但彼此相邻的分隔不超过 1
问题描述
我有一组值,我必须用它们的大写来分隔。但是在某些情况下,数组的值有 2、3 或 4 个串行大写字母,我不能分开。以下是一些值:
ERISACheckL
ERISA404cCheckL
F401kC
DisclosureG
SafeHarborE
要明确的结果必须是:
ERISA Check L
ERISA 404c Check L
F 401k C
Disclosure G
Safe Harbor E
我尝试使用:
value.match(/[A-Z].*[A-Z]/g).join(" ")
但当然,它不适用于连载信件。
解决方案
一种选择可能是匹配 1 个或多个大写字符,断言直接在右侧的不是小写字符,或者获取左侧是字符 az 或数字,右侧是大写字符的位置。
使用拆分并为模式使用捕获组以将其保留在结果中。
([A-Z]+(?![a-z]))|(?<=[\da-z])(?=[A-Z])
(
捕获组 1(使用拆分保留)[A-Z]+(?![a-z])
匹配 1+ 个大写字符,断言右边是 az
)
关闭组 1|
或者(?<=[\da-z])(?=[A-Z])
获取直接向左的位置是 az 或数字,而直接向右的位置是 AZ
const pattern = /([A-Z]+(?![a-z]))|(?<=[\da-z])(?=[A-Z])/;
[
"ERISACheckL",
"ERISA404cCheckL",
"F401kC",
"DisclosureG",
"SafeHarborE"
].forEach(s => console.log(s.split(pattern).filter(Boolean).join(" ")))
另一种选择是使用与不同部分匹配的替代方法: |
[A-Z]+(?![a-z])|[A-Z][a-z]*|\d+[a-z]+
[A-Z]+(?![a-z])
匹配 1+ 个大写字符,断言右边是 az|
或者[A-Z][a-z]*
匹配 AZ 可选地后跟 az 以匹配单个大写字符|
或者\d+[a-z]+
匹配 1+ 个数字和 1+ 个字符 az
const pattern = /[A-Z]+(?![a-z])|[A-Z][a-z]*|\d+[a-z]+/g;
[
"ERISACheckL",
"ERISA404cCheckL",
"F401kC",
"DisclosureG",
"SafeHarborE"
].forEach(s => console.log(s.match(pattern).join(" ")))
推荐阅读
- lda - Gibbs 采样迭代次数如何影响潜在 Dirichlet 分配?
- c# - 如何在linq c#中获取项目值和项目数
- aws-lambda - 在 CodePipeline 中访问 CloudWatch 事件变量
- python - 如何在此 IF 条件下从列表的总和中获取特定索引?
- c - 当我运行程序时,线程在 N 发送后停止发送消息
- regex - 空格之间的值的正则表达式
- python - py2exe 的可执行文件停止运行
- python - 压缩 PIL 图像而不保存文件
- excel - 将多个范围添加到数组,然后使用 .value 复制/粘贴到新工作表
- javascript - 条件类名三元运算符渲染