我有一個字符串,我需要根據大寫字母分割,我下面如何拆分基於大寫字母的字符串?
let s = 'OzievRQ7O37SB5qG3eLB';
var res = s.split(/(?=[A-Z])/)
console.log(res);
但是有一個扭曲,如果大寫字母是連續的,我需要的正則表達式「吃代碼「直到該序列ends.In上面的例子中它返回
..R,Q7,O37,S,B5Q,G3E,L,B
而且結果應該是
RQ7,O37,SB5q,G3e,LB
想法?謝謝。
我有一個字符串,我需要根據大寫字母分割,我下面如何拆分基於大寫字母的字符串?
let s = 'OzievRQ7O37SB5qG3eLB';
var res = s.split(/(?=[A-Z])/)
console.log(res);
但是有一個扭曲,如果大寫字母是連續的,我需要的正則表達式「吃代碼「直到該序列ends.In上面的例子中它返回
..R,Q7,O37,S,B5Q,G3E,L,B
而且結果應該是
RQ7,O37,SB5q,G3e,LB
想法?謝謝。
您需要將這些塊與/[A-Z]+[^A-Z]*|[^A-Z]+/g
匹配,而不是使用零寬度斷言模式進行拆分,因爲後者(在您的情況下,它只是一個正向超前正則表達式)將不得不檢查字符串中的每個位置,不可能告訴正則表達式在查找模式被發現後跳過一個位置。
s = 'and some text hereOzievRQ7O37SB5qG3eLB';
console.log(s.match(/[A-Z]+[^A-Z]*|[^A-Z]+/g));
見online regex demo at regex101.com。
詳細:
[A-Z]+
- 一個或多個大寫ASCII字母[^A-Z]*
- 零個或多個(允許匹配大寫只有塊),比ASCII大寫字母|
煤焦等 - 或[^A-Z]+
- 比大寫ASCII其他一個或多個字符讓ters(允許在字符串的開頭匹配非大寫的ASCII字母)。g
全局修飾符將讓String#match()
返回所有找到的非重疊匹配項。
如果輸入可能潛在地非大寫字母,您可以添加'開始[^ AZ] +'作爲替代正則表達式: ''aBc'.match(/ [AZ] + [^ AZ] * | [^ AZ] + /克)'返回'[ 「一」, 「BC」]' –
是的,這是正確的。我調整了答案。 –
「OzievRQ7O37SB5qG3eLB'.match(/ [A-Z] + [^ A-Z] + /克)? – Andrey
@Andrey張貼作爲一個答案 – Mihai
Wiktor的了吧:)他的正則表達式實際上是更好的 – Andrey