Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите написать регулярку (https://javascript.ru/forum/misc/70037-pomogite-napisat-regulyarku.html)

vovnet 05.08.2017 17:44

Помогите написать регулярку
 
Привет всем. Помогите составить регулярное выражение, уже бьюсь пол дня и все никак.
Есть строка
Код:

12:32  Вася Пупкин наложил проклятие на игрока Петя
Нужно доставать из этой строки имя первого игрока Вася Пупкин. :help:
Спасибо, что обратили внимание на тему.

laimas 05.08.2017 17:48

Если Пупкин всегда вначале, то "Вася Пупкин наложил проклятие на игрока Петя".split(" ", 2).join(" ").

vovnet 05.08.2017 18:28

Цитата:

Сообщение от laimas (Сообщение 460730)
Если Пупкин всегда вначале, то "Вася Пупкин наложил проклятие на игрока Петя".split(" ", 2).join(" ").

Дело в том, что Вася Пупкин - это ник, который всегда разный и перед ним временная метка. Получается что-то вроде такого шаблона:
20:13 <name 1> наложил проклятье на <name 2>
И нужно динамически получать name 1.

рони 05.08.2017 18:40

vovnet,
если ник не содержит цифр
var reg =/\D+(?=наложил проклятие)/;
var str = "12:32   Вася Пупкин наложил проклятие на игрока Петя";
str = str.match(reg);
str = str ? str[0]:"";
alert(str.trim());

рони 05.08.2017 18:45

vovnet,
var reg =/\d+:\d+(.*)(?=наложил проклятие)/;
var str = "12:32   Вася2018 Пупкин наложил проклятие на игрока Петя";
str = str.match(reg);
str = str ? str[1]:"";
alert(str.trim());

laimas 05.08.2017 18:47

Цитата:

Сообщение от vovnet
Дело в том, что Вася Пупкин - это ник, который всегда разный и перед ним временная метка

Должны быть четкие определения. То что сперва метка времени, а за ней обязательно ник, это уже хорошо, но Пупкин может быть и просто Пупкиным, а не Васей, или Васей Пупкиным Преображенским, а речь может идти о чем угодно, а это уже сложности.

vovnet 05.08.2017 19:00

Цитата:

Сообщение от рони (Сообщение 460742)
vovnet,
var reg =/\d+:\d+(.*)(?=наложил проклятие)/;
var str = "12:32   Вася2018 Пупкин наложил проклятие на игрока Петя";
str = str.match(reg);
str = str ? str[1]:"";
alert(str.trim());

Спасибо, вроде то что нужно. А как можно в строку поиска вставить переменную со вторым ником, чтобы было наподобие:
var nick = "Петя";
var reg =/\d+:\d+(.*)(?=наложил проклятие + nick)/;

laimas 05.08.2017 19:05

Цитата:

Сообщение от vovnet
Спасибо, вроде то что нужно.

У вас что конкретно для этой строки поиск, о проклятии Васи Пупкина? Ведь если текст будет иной, это работать не будет. И поиск var nick = "Петя";, это если узнать что такой именно есть, как собственно и для Пупкина в таком случае, иначе же это просто глупость.

рони 05.08.2017 19:11

vovnet,
на ... ? зачем?
var nick = "Петя";
var reg = new RegExp("\\d+:\\d+(.*)(?=наложил проклятие на игрока "+nick+")");
var str = "12:32   Вася2018 Пупкин наложил проклятие на игрока Петя";
str = str.match(reg);
str = str ? str[1]:"";
alert(str.trim());

vovnet 05.08.2017 19:40

Ну чтобы можно было фильтровать различных персонажей:blink:
Спасибо!

SV0L0CH 07.08.2017 10:40

И что делать когда одного из игроков зовут "наложил проклятие на игрока" или их имена содержат эту строку?

рони 07.08.2017 11:06

SV0L0CH,
банить такого игрока, или запрет на подобного вида ники.

SV0L0CH 08.08.2017 12:54

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


Часовой пояс GMT +3, время: 02:26.