Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 09.11.2017, 15:31
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Alexandroppolus,
Ответить с цитированием
  #22 (permalink)  
Старый 09.11.2017, 22:58
Кандидат Javascript-наук
Отправить личное сообщение для Lion777 Посмотреть профиль Найти все сообщения от Lion777
 
Регистрация: 04.11.2017
Сообщений: 117

подскажите по регулярке или инной выход. Мне нужно разбить строку по нескольким ключевым словам "включить выключить". Например,
есть строка:
"включить воду свет выключить воду выключить свет"
мне надо разбить ее на:

включить воду свет
выключить воду
выключить свет

подскажите варианты
Ответить с цитированием
  #23 (permalink)  
Старый 09.11.2017, 23:35
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,007

var str = "не включать нифига включить воду свет выключить воду выключить свет";
var values = str.match(/(?:включить|выключить)\s(?:.(?!включить|выключить))+/g);
alert(values.join('\n'));
Ответить с цитированием
  #24 (permalink)  
Старый 10.11.2017, 00:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

var str = "не включать нифига включить воду свет выключить воду выключить свет";
var values = str.match(/(включить|выключить).*?(?=включить|выключить|$)/g);
alert(values.join('\n'));
Ответить с цитированием
  #25 (permalink)  
Старый 10.11.2017, 00:44
Кандидат Javascript-наук
Отправить личное сообщение для Lion777 Посмотреть профиль Найти все сообщения от Lion777
 
Регистрация: 04.11.2017
Сообщений: 117

пасиб ребята, надо регулярки подтянуть мне, с 2009 года не кодил, все настолько забылось, что просто ужас, счас буду разбиратся в ваших регулярках, что к чему...
Ответить с цитированием
  #26 (permalink)  
Старый 10.11.2017, 15:12
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

рони,
Правильно ли я сформулировал?

Сопоставить слово "включить или выключить" за которым следует произвольный символ, повторяющийся только, если за ним следует слово "включить или выключить", или конец строки.

Alexandroppolus,
Сопоставить слово "включить или выключить" за которым следует пробел, за пробелом следует произвольный символ повторяющийся один и более раз, если только за ним не следут слово "включить или выключить".

Зачем запрет на использование ссылок в группировке? У меня правильно находит и без символов ?:
/(включить|выключить)\s(.(?!включить|выключить))+/g
Ответить с цитированием
  #27 (permalink)  
Старый 10.11.2017, 15:35
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,007

Сообщение от Rasy
Зачем запрет на использование ссылок в группировке?
запрета, конечно же, нет. Не захватывается группа в матчинге. Незначительная экономия. Просто я привык уже )

Сообщение от Rasy
Правильно ли я сформулировал?
насчет моего правильно, а у рони главная фишка в нежадном *
баз вопросика там съело бы всю строку первым совпадением.
Ответить с цитированием
  #28 (permalink)  
Старый 10.11.2017, 17:12
Кандидат Javascript-наук
Отправить личное сообщение для Lion777 Посмотреть профиль Найти все сообщения от Lion777
 
Регистрация: 04.11.2017
Сообщений: 117

подскажите, почему данная регулярка не будет работать ?
/(?:включить|выключить).+(?!включить|выключить)/gim

сначала проверяем есть ли включить|выключить потом идет любой символ от 1 и больше раза и не должно быть в конце включить|выключить ?

---
Я вообщем из разбора ваших примеров решил так
/(?:включить|выключить)(?:.(?!включить|выключить))+/gim

так как мне может прилететь строка
"Включить воду свет выключить воду выключить включить свет" и тогда выдаст ["выключить воду", "выключить включить свет"]

Последний раз редактировалось Lion777, 10.11.2017 в 17:41.
Ответить с цитированием
  #29 (permalink)  
Старый 10.11.2017, 17:59
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Сообщение от Lion777
подскажите, почему данная регулярка не будет работать ?
Повторение жадное.
Сообщение от Alexandroppolus
баз вопросика там съело бы всю строку первым совпадением.
Ответить с цитированием
  #30 (permalink)  
Старый 10.11.2017, 23:38
Кандидат Javascript-наук
Отправить личное сообщение для Lion777 Посмотреть профиль Найти все сообщения от Lion777
 
Регистрация: 04.11.2017
Сообщений: 117

Ребята, я еще со своим велосипедом )), сегодня вспоминал регулярки и вот такой вопрос по прежнему вопросу.
Есть строка:

"Включить воду свет выключить воду выключить включить свет"

мне надо что-бы не повторялось подряд выключить включить, а учитывалась последняя подстрока "включить|выключить" с данными, решил вот такой регуляркой

var str = "Включить воду свет выключить воду выключить включить свет" ;
var reg = /(?:включить|выключить)\s(?!включить|выключить).+?(?=\sвключить|\sвыключить|$)/gim;
alert(str.match(reg));



Есть получше вариант ? Или это нормально в плане оптимизаци?

Последний раз редактировалось Lion777, 11.11.2017 в 00:32.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести кол-во дней до дня Рождения plug-ugly Общие вопросы Javascript 3 14.09.2017 10:16
Запуск браузера (IE6 и выше) без "офорлмения" - без панелей, меню, строки состояния jett Events/DOM/Window 4 23.11.2011 15:58
$.ajax работает без success но при этом часть кода перезагружается!? saturn Элементы интерфейса 0 16.10.2011 10:09
Get запрос в Greasemonkey без обновления страницы 100matolog Общие вопросы Javascript 1 03.10.2011 04:37
Подскажите как в VLC плеере переключать канал без перезагрузки страницы? mff Events/DOM/Window 0 10.05.2010 17:28