05.08.2017, 17:44
|
Новичок на форуме
|
|
Регистрация: 05.08.2017
Сообщений: 4
|
|
Помогите написать регулярку
Привет всем. Помогите составить регулярное выражение, уже бьюсь пол дня и все никак.
Есть строка
Код:
|
12:32 Вася Пупкин наложил проклятие на игрока Петя |
Нужно доставать из этой строки имя первого игрока Вася Пупкин.
Спасибо, что обратили внимание на тему.
|
|
05.08.2017, 17:48
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Если Пупкин всегда вначале, то "Вася Пупкин наложил проклятие на игрока Петя".split(" ", 2).join(" ").
Последний раз редактировалось laimas, 05.08.2017 в 18:06.
|
|
05.08.2017, 18:28
|
Новичок на форуме
|
|
Регистрация: 05.08.2017
Сообщений: 4
|
|
Сообщение от laimas
|
Если Пупкин всегда вначале, то "Вася Пупкин наложил проклятие на игрока Петя".split(" ", 2).join(" ").
|
Дело в том, что Вася Пупкин - это ник, который всегда разный и перед ним временная метка. Получается что-то вроде такого шаблона:
20:13 <name 1> наложил проклятье на <name 2>
И нужно динамически получать name 1.
|
|
05.08.2017, 18:40
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
vovnet,
если ник не содержит цифр
var reg =/\D+(?=наложил проклятие)/;
var str = "12:32 Вася Пупкин наложил проклятие на игрока Петя";
str = str.match(reg);
str = str ? str[0]:"";
alert(str.trim());
Последний раз редактировалось рони, 05.08.2017 в 18:42.
|
|
05.08.2017, 18:45
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
vovnet,
var reg =/\d+:\d+(.*)(?=наложил проклятие)/;
var str = "12:32 Вася2018 Пупкин наложил проклятие на игрока Петя";
str = str.match(reg);
str = str ? str[1]:"";
alert(str.trim());
|
|
05.08.2017, 18:47
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от vovnet
|
Дело в том, что Вася Пупкин - это ник, который всегда разный и перед ним временная метка
|
Должны быть четкие определения. То что сперва метка времени, а за ней обязательно ник, это уже хорошо, но Пупкин может быть и просто Пупкиным, а не Васей, или Васей Пупкиным Преображенским, а речь может идти о чем угодно, а это уже сложности.
|
|
05.08.2017, 19:00
|
Новичок на форуме
|
|
Регистрация: 05.08.2017
Сообщений: 4
|
|
Сообщение от рони
|
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)/;
|
|
05.08.2017, 19:05
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от vovnet
|
Спасибо, вроде то что нужно.
|
У вас что конкретно для этой строки поиск, о проклятии Васи Пупкина? Ведь если текст будет иной, это работать не будет. И поиск var nick = "Петя";, это если узнать что такой именно есть, как собственно и для Пупкина в таком случае, иначе же это просто глупость.
|
|
05.08.2017, 19:11
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
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());
|
|
05.08.2017, 19:40
|
Новичок на форуме
|
|
Регистрация: 05.08.2017
Сообщений: 4
|
|
Ну чтобы можно было фильтровать различных персонажей
Спасибо!
|
|
|
|