猿问

正则表达式大写分隔但彼此相邻的分隔不超过 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(" ")

但当然它不适用于连续字母。


慕桂英3389331
浏览 133回答 2
2回答

Smart猫小萌

一种选择是匹配 1 个或多个大写字符,断言直接在右边的不是小写字符,或者获取左边是字符 az 或数字,右边是大写字符的位置。使用拆分并为模式使用捕获组以将其保留在结果中。([A-Z]+(?![a-z]))|(?<=[\da-z])(?=[A-Z])(捕获组 1(使用 split 保留)[A-Z]+(?![a-z])匹配 1+ 个大写字符,断言直接在右边的是 az)关闭第 1 组|或者(?<=[\da-z])(?=[A-Z])获取紧靠左边的位置是 az 或数字,紧靠右边的位置是 AZconst 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+ 个字符 azconst 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(" ")))

jeck猫

function formatString(str) {&nbsp; return str.replace(/([A-Z][a-z]+|\d+[a-z]+)/g, ' $1 ').replace('&nbsp; ', ' ').trim();}// test[&nbsp; 'ERISACheckL',&nbsp; 'ERISA404cCheckL',&nbsp; 'F401kC',&nbsp; 'DisclosureG',&nbsp; 'SafeHarborE'].forEach(item => {&nbsp; console.log(formatString(item));});
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答