亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式大寫分隔但彼此相鄰的分隔不超過 1

正則表達式大寫分隔但彼此相鄰的分隔不超過 1

慕桂英3389331 2023-04-27 15:23:30
我有一組值,我必須用大寫字母分隔它們。但是在某些情況下,數組的值有 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(" ")但當然它不適用于連續字母。
查看完整描述

2 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

一種選擇是匹配 1 個或多個大寫字符,斷言直接在右邊的不是小寫字符,或者獲取左邊是字符 az 或數字,右邊是大寫字符的位置。

使用拆分并為模式使用捕獲組以將其保留在結果中。

([A-Z]+(?![a-z]))|(?<=[\da-z])(?=[A-Z])
  • (捕獲組 1(使用 split 保留)

    • [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(" ")))


查看完整回答
反對 回復 2023-04-27
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

function formatString(str) {

  return str.replace(/([A-Z][a-z]+|\d+[a-z]+)/g, ' $1 ').replace('  ', ' ').trim();

}


// test

[

  'ERISACheckL',

  'ERISA404cCheckL',

  'F401kC',

  'DisclosureG',

  'SafeHarborE'

].forEach(item => {

  console.log(formatString(item));

});


查看完整回答
反對 回復 2023-04-27
  • 2 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號