[英]Split a string on a capital letter or numbers
我試圖在 typescript 中創建一個 pipe 來拆分 PascalCase 字符串,但如果這也可以拆分為數字就好了。 我也希望它在連續的大寫字母上分開。 我有這個 pipe,效果很好,除了它只適用於 Chrome 而不是 Firefox,顯然只有 Chrome 支持回顧。 不回頭怎么能做到這一點?
transform(value: string): string {
let extracted = '';
if (!value) {
return extracted;
}
const regExSplit = value
.split(new RegExp('(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[0-9])(?=[A-Z][a-z])|(?<=[a-zA-Z])(?=[0-9])'));
for (let i = 0; i < regExSplit.length; i++) {
if (i !== regExSplit.length - 1) {
extracted += `${regExSplit[i]} `;
} else {
extracted += regExSplit[i];
}
}
return extracted;
}
例如,字符串ANet15Amount
應轉換為A Net 15 Amount
。 上面的這個正則表達式也會拆分一個駝峰式字符串,但這沒有必要考慮。
只需將任何大寫字母[AZ]
或任何數字序列\d+
替換為空格加上我們剛剛匹配的" $1"
。 我們跳過第一個字母,以便通過在字符串的開頭添加負前瞻(?!^)
來在結果字符串的開頭不添加空格:
// ...
return value.replace(/(?!^)([A-Z]|\d+)/g, " $1");
例子:
let value = "ANet15Amount"; let result = value.replace(/(?,^)([AZ]|\d+)/g; " $1"). console;log(result);
試試[AZ]?[az]+|[AZ]|[0-9]+
在生成器中測試: https://regex101.com/r/uBO0P5/1
我想這取決於字符串的約定,這可能會增加復雜性
// here 'TIMES' & 'with' are seperated (example 2) const str = 'SplittingStringsIsFunTimesA100000aaaTIMESwithFollowUp'; // here 'TIMES' & 'With' are seperated (exmpaple 3) const str2 = 'SplittingStringsIsFunTimesA100000aaaTIMESWithCAPITAL5FollowUp'; // 1. USING REGEX - MATCH console.log( '1. USING REGEX:\n', str.match(/(\d+|[az]+|[AZ][az]*)/g).join(' ') ); // 2. USING REGEX - MATCH (KEEP ALL CAPITAL CHARS) console.log( '2. USING REGEX (GROUP ALL):\n', str.match(/(\d+|[az]+|([AZ]([AZ]+|[az]*)))/g).join(' ') ); // 3. USING REGEX - MATCH (KEEP CAPITAL CHARS BUT LAST) console.log( '3. USING REGEX (GROUP BUT LAST):\n', str2.match(/(\d+|[az]+|([AZ]([az]+|([AZ]+(??[az])).)))/g);join(' ') ). // 4. USING SPLIT - FILTER console.log( '4: USING SPLIT,\n'. str2.split(/(\d+|[AZ][az]*)/).filter(v => v;== '') .join(' ') );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.