|   |   | 
| 
 | Задача на REGEX (JavaScript) | ☑ | ||
|---|---|---|---|---|
| 0
    
        Доктор Манхэттен 06.09.18✎ 15:22 | 
        Кто силен в regex? Нужно в многострочной строке найти подстроку по такому условию:
 "строка1", "любые символы включая перенос строки, кроме строка1 и кроме строка2", "строка2" | |||
| 1
    
        Вафель 06.09.18✎ 15:23 | 
        строка1*строка2 не жадный вариант (а он по умолчанию) не будет содержать внутри строка1 | |||
| 2
    
        Fragster гуру 06.09.18✎ 15:32 | 
        (1) по умолчанию как раз жадный     | |||
| 3
    
        Fragster гуру 06.09.18✎ 15:33 | 
        да и вообще в (1) "0 или более повторений единицы" в середине     | |||
| 4
    
        1000110111100101 06.09.18✎ 15:33 | 
        строка1.+?строка2     | |||
| 5
    
        Вафель 06.09.18✎ 15:34 | 
        нет чтот я наврал     | |||
| 6
    
        Очевидно 06.09.18✎ 15:36 | 
        grep 'строка1.*строка2'     | |||
| 7
    
        Вафель 06.09.18✎ 15:43 | 
        Вот такой вариант, но он не учитывает наличие строки1 внтури (?<=строка1)(.|\n)*(?=строка2) для теста https://regex101.com | |||
| 8
    
        Доктор Манхэттен 06.09.18✎ 15:45 | 
        (7) А надо учитывать наличие строки1 внтури     | |||
| 9
    
        Fragster гуру 06.09.18✎ 15:49 | 
        ИМХО задача на регэкспах не совсем решаема, проще свою стейт машину написать с поиском строк. Ну, или через последовательное деление по "Строка2", а затем кусков по "Строка1"     | |||
| 10
    
        Fragster гуру 06.09.18✎ 15:51 | 
        проблема в том, что условия исключения более одного символа в длину и "любой символ" скушает сначала кусок от строки исключения, а потом остаток также не будет строкой искючения.     | |||
| 11
    
        Доктор Манхэттен 06.09.18✎ 16:06 | 
        (9) +1
 Мне тоже сначала показалось что задача нерешаемая. | |||
| 12
    
        Вафель 06.09.18✎ 16:07 | 
        тут нужно через рекурсивные делать     | |||
| 13
    
        Вафель 06.09.18✎ 16:08 | ||||
| 14
    
        Доктор Манхэттен 06.09.18✎ 16:34 | 
        (13) для PHP не пойдет, нужно именно для JavaScript     | |||
| 15
    
        Вафель 06.09.18✎ 16:45 | 
        Вот такая борется с 1 вложенной строкой     | |||
| 16
    
        Вафель 06.09.18✎ 16:45 | ||||
| 17
    
        Fragster гуру 06.09.18✎ 16:49 | 
        (16) строка1 плваопо строка2валпваоп строка1 ьопау лдпаа строка2     | |||
| 18
    
        Вафель 06.09.18✎ 16:52 | 
        для однострочки такой пойдет (?'start'строка1).*(?&start)(?'res'.*)(?=строка2) https://regex101.com/r/bcoUwM/3 | |||
| 19
    
        Вафель 06.09.18✎ 16:52 | 
        в группе res будет лежать минимальная строка     | |||
| 20
    
        Вафель 06.09.18✎ 16:55 | 
        итоговый вариант с учетом переносов строк (?'start'строка1)(.|\n)*(?&start)(?'res'(.|\n)*)(строка2) | |||
| 21
    
        Fragster гуру 06.09.18✎ 16:58 | 
        (20) строка1 плваопо валпваоп строка1 sdf строка2 ьопау лc строка1 дпаа строка2     | |||
| 22
    
        Вафель 06.09.18✎ 16:59 | 
        ну да, когда в тексте несколько ответов, то найдет только последний     | |||
| 23
    
        Fragster гуру 06.09.18✎ 17:13 | 
        (22) строка1 плваопо валпваоп строка1 ьопау лc строка1 дпаа строка2 дпаа строка2     | |||
| 24
    
        Доктор Манхэттен 06.09.18✎ 17:23 | 
        (20) Переносы строк могут быть и в Windows формате. Вместо (.|\n) в жаваскрипте можно делать [^]     | |||
| 25
    
        Вафель 06.09.18✎ 17:29 | 
        вот еще вариант (?<=s1)((?!s1|s2)(.|\n))*(?=s2) | |||
| 26
    
        Доктор Манхэттен 06.09.18✎ 17:29 | 
        (20) и PHP шаблоны не подходят, нужно решаить только на JS     | |||
| 27
    
        Fragster гуру 06.09.18✎ 17:32 | 
        (25) этот хороший. остались проблемы с переносом строк и тем, что у автора непонятно что (подозреваю, что даже на javascript, а встроенный в виндовс кастрат)     | |||
| 28
    
        Доктор Манхэттен 06.09.18✎ 17:33 | 
        (25) Вроде хороший вариант.
 Как тебе такое, Fragster? | |||
| 29
    
        Вафель 06.09.18✎ 17:33 | 
        (27) переносы вроде отрабатывает     | |||
| 30
    
        Вафель 06.09.18✎ 17:34 | 
        можно без look ahead, но тогда s1 и s2 будут внтри найленной строки     | |||
| 31
    
        Доктор Манхэттен 06.09.18✎ 17:34 | 
        (27) Что не так с переносами и javascript?     | |||
| 32
    
        Доктор Манхэттен 06.09.18✎ 17:34 | 
        (30) На это пофиг, пусть будут     | |||
| 33
    
        Вафель 06.09.18✎ 17:35 | 
        (s1)(((?!s1|s2)(.|\n))*)(s2)     | |||
| 34
    
        Fragster гуру 06.09.18✎ 17:35 | 
        (28) >(подозреваю, что даже на javascript, а встроенный в виндовс кастрат)     | |||
| 35
    
        Доктор Манхэттен 06.09.18✎ 17:36 | 
        (34) Регулярка то чем плоха? У тебя не работает или что?     | |||
| 36
    
        Fragster гуру 06.09.18✎ 17:37 | 
        (35) я же сказал, что она норм, за исключением переносов и того, что у тебя может быть не тот javascript, что на сайте     | |||
| 37
    
        Доктор Манхэттен 06.09.18✎ 17:38 | 
        (36) Что не так с переносами? И если у меня не тот JS что на сайте, что это меняет?     | |||
| 38
    
        Вафель 06.09.18✎ 17:38 | 
        чтоб учесть все виды переносов .|\n|\n\r | |||
| 39
    
        Вафель 06.09.18✎ 17:38 | 
        или \r\n уже не помню     | |||
| 40
    
        Доктор Манхэттен 06.09.18✎ 17:39 | 
        (38) Про переносы я уже писал выше (24)
 Не запаривайся, там все норм | |||
| 41
    
        Вафель 06.09.18✎ 17:41 | 
        (40) на сайте такой вариант не отрабатывает     | |||
| 42
    
        Fragster гуру 06.09.18✎ 17:41 | 
        (37) 
 >Что не так с переносами? разные движки по разному обрабатывают переносы >И если у меня не тот JS что на сайте, что это меняет? если у тебя vbscript.regex (или jscript.regex), то там ЕМНИП всякие negative lookahead/behind плохо работают (38)(39) забей, и без этого норм, . поглощает \n | |||
| 43
    
        Доктор Манхэттен 06.09.18✎ 17:42 | 
        (41) Переключи с PHP на жаваскрипт, и будет отрабатывать     | |||
| 44
    
        Fragster гуру 06.09.18✎ 17:42 | ||||
| 45
    
        Вафель 06.09.18✎ 17:45 | 
        ах вот ты что про пернос троки имел ввиду     | |||
| 46
    
        Вафель 06.09.18✎ 17:46 | 
        Хорошая задачка была.     | |||
| 47
    
        Доктор Манхэттен 06.09.18✎ 17:48 | 
        (46) Рад был помочь     | |||
| 48
    
        Доктор Манхэттен 06.09.18✎ 17:49 | 
        Надо на мисте сделать рейтинг чуваков которые в чем-то шарат.
 Там будут как минимум уже двое: jsmith82 и Вафель | |||
| 49
    
        Fragster гуру 06.09.18✎ 17:50 | 
        (48) рейтинг мудаков будет полезнее     | |||
| 50
    
        Fragster гуру 06.09.18✎ 17:51 | 
        по этому никакого рейтинга не будет, ставь себе сам галочки     | |||
| 51
    
        Доктор Манхэттен 06.09.18✎ 17:51 | 
        (49) Не думаю. Можно просто открыть список всех пользователей     | |||
| 52
    
        Доктор Манхэттен 06.09.18✎ 17:56 | 
        (50) Ага, поставил     | |||
| 53
    
        Доктор Манхэттен 06.09.18✎ 19:21 | 
        (33) Немного убрал лишние группы и упростил:
 (?:s1)((?!s1)[^])*?(?:s2) | |||
| 54
    
        Сияющий в темноте 07.09.18✎ 09:20 | 
        В javascript есть замечательный indexOf,позволяющий искать с указанного места,просто ищем строку 1,а потом от нее же строку 1 и строку2,если 1 нашлась раньше,то переходим на нее,если нашлась вторая,то вот он наш кусок.
 и,есть подозрение,что работать будет быстрее,чем RegExp | |||
| 55
    
        Доктор Манхэттен 07.09.18✎ 19:21 | 
        (54) В этом никто не сомневается, и к условию задачи это не имеет отношения. В заголовке темы же написано: "Задача на REGEX"     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |