|
Задача на 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"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |