Изменение regex
господа, леди. У меня есть regex выражение - /^\[\w+\]\[\d\].+$/. Оно работает замечательно. Использую я его на никнеймах в собственном боте. Он настроен под подобные никнеймы: [LSMC][1] Имя_Фамилия, [SFPD][1] Vladimir_Andreikov.
Со своей задачей он замечательно справляется, но есть некоторая проблемка. Под первый тег в скобочках мне бывают нужны и русские значения по типу [ЛСа][1] Andrey_Andrey. Сам я с regex к сожалению не имею работать, поэтому хотел бы попросить о помощи. Мне необходим regex который будет позволять содержать в первых скобочках значение которое написано русскими или английскими символами, во вторых скобочках должны быть только числа, а после вторых уже что угодно.
Заранее спасибо!
Ответы (3 шт):
Если язык JavaScript, то для обозначения кириллицы предлагается использовать промежуток символов, используя форму \uhhhh, где «hhhh» — это значение символа Юникода, записанное в шестнадцатеричной форме. Смотрите пример ниже.
var text = 'Образец text на русском языке';
var regex = /[\u0400-\u04FF]+/g;
var match = regex.exec(text);
console.log(match[0]); // напечатает 'Образец'
console.log(regex.lastIndex); // напечатает '7'
var match2 = regex.exec(text);
console.log(match2[0]); // напечатает 'на' [не 'text']
console.log(regex.lastIndex); // напечатает '15'
Подробнее о регулярных выражениях можете прочитать тут.
Пример взят из документации. Так что для вашего случая, скорее всего придется использовать промежуток \u0410-\u044F
Насколько я понял по или в сообщение, текст ника должен быть либо на русском, либо на английском, для этого используем логическое или
const str = `НагиBATTOR2000ddddd
[Nagibatar][2000]wgeg
[НагиБАТТОР][2000]
[ЁКарный][1001]
[Pro][100]
[ProВася][123]
[Pro100][123]
[Про100][123]
`;
regex = /\[(?:\w+|[а-яё0-9_]+)\]\[\d+\]/mig;
console.log(str.match(regex));
О регулярном выражении:
\[(?:\w+|[а-яё0-9_]+)\]\[\d+\]
(?:\w+|[а-яё0-9_]+) - не захватываемая группа, где выбираем либо латинские буквы в диапазоне a-z, цифры 0-9 и знак нижнего подчеркивания_, либо кириллицу в диапазоне а-я, цифры 0-9 и знак нижнего подчеркивания_
Использованы ключи регулярного выражения: мультистрока, игнорирования регистра, глобальный поиск
В js \w+ означает только латинские буквы. Если надо добавить русские, то можно сделать [\wА-ЯЁа-яё] или [A-Za-zА-ЯЁа-яё]. Если использовать флаг i, то можно написать только в одном регистре.
Если позволяет поддержка браузером, то можно разрешить буквы всех языков: /\p{L}+/u. Чтобы разрешить только загравные буквы всех языков: /\p{Lu}+/u. А для разрешения только кириллических букв: /\p{sc=Cyrl}+/u.