Regex соответствует символу верхнего регистра, пока не встретится цифра
Я пытаюсь поймать строку, содержащую два или более символов в верхнем регистре. Конец строки всегда является числом. Иногда могут быть разрывы строк между буквами и числом, иногда нет. Вот что у меня есть до сих пор:
[A-Z-ÅÖÄ\s]+[^\d]
Двигатель основан на javascript.
Пример:
Входные данные:
ABC ABCDE XYZ
1
EFG XYZ ABC 2
not me
EFG ABC
3
Выход: match1: ABC ABCDE XYZ match2: EFG XYZ ABC match3: EFG ABC
Вы можете использовать это регулярное выражение в Javascript:
/^[A-Z]{2}[^]*?(?=\s*\d+$)/gm
RegEx Описание:
^
- начало линии [AZ]{2}
- Матч 2 заглавные английские алфавиты [^]*?
- Сопоставьте 0 или более любых символов (включая новую строку), ленивых (?=\s*\d+$)
- Lookahead, который утверждает, что у нас есть 0 или более пробелов, за которыми следуют 1 или более цифр в конце. Демо-версия кода:
var str = 'ABC ABCDE XYZ
1
EFG XYZ ABC 2
not me
EFG ABC
3';
var re = /^[A-Z]{2}[^]*?(?=\s*\d+$)/gm;
var m = str.match(re);
console.log(m);
Попробуй это:
^[A-Z]{2}( *[A-Z])*(?=\s\d$)
Смотрите демо-версию.
Или эта многоязычная версия (YMMV в JavaScript):
^\p{Lu}{2}( *\p{Lu})*(?=\s\d$)
Смотрите демо-версию.
Это обрабатывает все прописные буквы со всех языков (как предполагалось в вашей попытке, включая символы ÅÖÄ
).
Ни один из них не будет соответствовать "ABC fail 1"
.