Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.04.2016, 00:13
Интересующийся
Отправить личное сообщение для Frozen Coyote Посмотреть профиль Найти все сообщения от Frozen Coyote
 
Регистрация: 16.02.2011
Сообщений: 14

Регулярное выражение, помогите плиз
Приветсвую, господа,

прошу помощи: необходимо составить регулярное выражение, которое ловит диапазон <p></p> но при условии, если в этом диапазоне (читай в параграфе) отсуствует какое то определенное слово (или иная последовательность символов), ну допустим "петя". Понимаю что надо как то использовать негативное загляядывание вперед, но не соображу как, не получается... что то типа /<p.+?<\/p(?!Петя)/gi


спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 15.04.2016, 00:23
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

Frozen Coyote,
var p = "Sarah Connor";

p.indexOf("John") >= 0 ? alert("John found!") : alert ("No John");


с RegEx

var word = /John/,
    p = "Sarah Connor";

word.test(p) ? alert ("John found!") : alert ("No John");

Последний раз редактировалось Alexander Belov, 15.04.2016 в 00:38.
Ответить с цитированием
  #3 (permalink)  
Старый 15.04.2016, 00:46
Интересующийся
Отправить личное сообщение для Frozen Coyote Посмотреть профиль Найти все сообщения от Frozen Coyote
 
Регистрация: 16.02.2011
Сообщений: 14

наверно я неправильно объяснил, но суть Вашего ответа не совсем уловил. Пример с параграфами для простоты оформил. Есть несколько совпадений по регулярному выражению, Результат1, Результат2, Результат3, например /<\/p>(.+?)<\/p>/gi должен вернуть </p>Результат1</p>, </p>Еще какой то результат</p> и </p>Третий результат</p>, мне нужно задать исключение чтобы к примеру результат содержащий слово "какой то" исключался
Ответить с цитированием
  #4 (permalink)  
Старый 15.04.2016, 08:26
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

Frozen Coyote,
Напишите пример обычным предложением, не уверен, что понимаю.
Напр.:
Строка: "Светлый майский день" при совпадении с /день/ должна возвращать то-то, при не совпадении то-то...
Ответить с цитированием
  #5 (permalink)  
Старый 15.04.2016, 09:07
Интересующийся
Отправить личное сообщение для Frozen Coyote Посмотреть профиль Найти все сообщения от Frozen Coyote
 
Регистрация: 16.02.2011
Сообщений: 14

паттерн /светлый.+?день/ возвращает светлый майский день, светлый июньский день, светлый ноябрьский день. Хотелось бы чтобы при наличии слова "июньский" внутри совпадения, данный результат игнорировался.

спасибо большое
Ответить с цитированием
  #6 (permalink)  
Старый 15.04.2016, 10:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

stupidpendos,
<p>peter bar</p>
а так?
Ответить с цитированием
  #7 (permalink)  
Старый 15.04.2016, 10:28
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

Frozen Coyote,
var apr = "It's a dark april night",
    may = "It's a bright may day",
    jun = "It's a bright june day",
    jul = "It's a bright july day";

var pattern = (".* bright(?!june).* day.*");

apr.match(pattern) ? alert("Gotcha!") : alert("Sorry");
may.match(pattern) ? alert("Gotcha!") : alert("Sorry");
jun.match(pattern) ? alert("Gotcha!") : alert("Sorry");
jul.match(pattern) ? alert("Gotcha!") : alert("Sorry");


Я правильно понял? Аналогичный результат нужен?

Последний раз редактировалось Alexander Belov, 15.04.2016 в 10:43.
Ответить с цитированием
  #8 (permalink)  
Старый 15.04.2016, 10:40
Интересующийся
Посмотреть профиль Найти все сообщения от stupidpendos
 
Регистрация: 09.04.2016
Сообщений: 12

Сообщение от рони Посмотреть сообщение
stupidpendos,
<p>peter bar</p>
а так?
да, местами, по ходу поменять надо
<html>
<head> </head>
<body>

<div id = "container">
 <p>foo bar</p>
 <div>foo bar</div>
 <p>foo bar</p>
 <div>foo bar</div>
 <p>foo peter bar</p>
 <p>peter bar</p>
 <p>foo bar</p>
 <div>foo bar</div>
 <p>foo sam bar</p>
 <p>foo bar</p>
</div>


 <script>



   re = /<p>(((?!peter)[\s\S])*?)<\/p>/g

  console.log(
   container.innerHTML.match(re).join("\n")
   )



 </script>
</body>
Ответить с цитированием
  #9 (permalink)  
Старый 15.04.2016, 12:21
Интересующийся
Отправить личное сообщение для Frozen Coyote Посмотреть профиль Найти все сообщения от Frozen Coyote
 
Регистрация: 16.02.2011
Сообщений: 14

Alexander Belov, спасибо, все правильно получилось, ребята, всем спасибо за содействие.

еще вопрос крохотный, подскажите пожалуйста. у меня есть строка допустим "бахбахбах", если задать паттерн "бахбах" - регулярка находит только одно совпадение, проскакивая дальше, а в строке как мы видим - две комбинации. как заставить выражение выцепить оба?
Ответить с цитированием
  #10 (permalink)  
Старый 15.04.2016, 12:28
Интересующийся
Посмотреть профиль Найти все сообщения от stupidpendos
 
Регистрация: 09.04.2016
Сообщений: 12

Frozen Coyote,
так не делается. Регулярки однопроходные по-определению, иначе бы они тормозили. Решайте задачу по другому
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите составить регулярное выражение yura29 Общие вопросы Javascript 3 08.06.2014 00:35
Помогите написать регулярное выражение bigjoy Общие вопросы Javascript 2 15.02.2014 23:23
Помогите составить регулярное выражение Ucorp Общие вопросы Javascript 1 17.10.2012 16:28
Помогите написать регулярное выражение! Dorian_bs Общие вопросы Javascript 7 09.12.2011 09:12
регулярное выражение, помогите serhanters jQuery 2 12.07.2011 10:14