Изменение regex

господа, леди. У меня есть regex выражение - /^\[\w+\]\[\d\].+$/. Оно работает замечательно. Использую я его на никнеймах в собственном боте. Он настроен под подобные никнеймы: [LSMC][1] Имя_Фамилия, [SFPD][1] Vladimir_Andreikov. Со своей задачей он замечательно справляется, но есть некоторая проблемка. Под первый тег в скобочках мне бывают нужны и русские значения по типу [ЛСа][1] Andrey_Andrey. Сам я с regex к сожалению не имею работать, поэтому хотел бы попросить о помощи. Мне необходим regex который будет позволять содержать в первых скобочках значение которое написано русскими или английскими символами, во вторых скобочках должны быть только числа, а после вторых уже что угодно. Заранее спасибо!


Ответы (3 шт):

Автор решения: SelectionForCollection

Если язык 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

→ Ссылка
Автор решения: ipatev_nn

Насколько я понял по или в сообщение, текст ника должен быть либо на русском, либо на английском, для этого используем логическое или

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 и знак нижнего подчеркивания_
Использованы ключи регулярного выражения: мультистрока, игнорирования регистра, глобальный поиск

→ Ссылка
Автор решения: Qwertiy

В js \w+ означает только латинские буквы. Если надо добавить русские, то можно сделать [\wА-ЯЁа-яё] или [A-Za-zА-ЯЁа-яё]. Если использовать флаг i, то можно написать только в одном регистре.

Если позволяет поддержка браузером, то можно разрешить буквы всех языков: /\p{L}+/u. Чтобы разрешить только загравные буквы всех языков: /\p{Lu}+/u. А для разрешения только кириллических букв: /\p{sc=Cyrl}+/u.

→ Ссылка