Size: a a a

JavaScript — русскоговорящее сообщество

2020 October 12

AE

Alexey Ermakov in JavaScript — русскоговорящее сообщество
Игорь
Не помню как в JS, но в perl, если делать без оптимизаций, то вот так:
my $test = 'test

line 1
line 2

test
';

if ($test =~ /^.*\n\n(.+)\n\n.*$/s) {
   print $1;
}


Выведет как раз:
line 1
line 2


Регулярки везде +- одинаковые, поэтому, думаю, не проблема перенести. Главное чтобы в JS был флаг, что многострочный текст нужно рассматривать как одну строку (аналог s из perl).
в js регулярки немного кастрированы по сравнению с нормальными языками
источник

TG

Timofey Goncharov in JavaScript — русскоговорящее сообщество
Игорь
ну так и пиши:
^.*\n\n(.+)\n\n.*$

где:
^ - начало строки
.* - любой текст, которого может и не быть
\n\n(.+)\n\n - условие выдирания
.* - любой текст, которого может и не быть
$ - конец строки
ну на скрине видно что не работает)
источник

TG

Timofey Goncharov in JavaScript — русскоговорящее сообщество
источник

И

Игорь in JavaScript — русскоговорящее сообщество
Timofey Goncharov
как-то не очень
так я же написал, что нужен флаг что это типа одна больная строка
источник

AE

Alexey Ermakov in JavaScript — русскоговорящее сообщество
gm
источник

TG

Timofey Goncharov in JavaScript — русскоговорящее сообщество
Игорь
так я же написал, что нужен флаг что это типа одна больная строка
ну флаг справа s
источник

TG

Timofey Goncharov in JavaScript — русскоговорящее сообщество
m заставляет ^ и $ обозначать начало/конец текста или начало/конец строки
источник

VR

Victor Rusakovich in JavaScript — русскоговорящее сообщество
Timofey Goncharov
как-то не очень
const regex = /\n\n\n(.*)\n\n\n/gm;
const str = `hew


CAPTURED  


sfsdfsd

fsdfsdf

`;
let m;

while ((m = regex.exec(str)) !== null) {
   // This is necessary to avoid infinite loops with zero-width matches
   if (m.index === regex.lastIndex) {
       regex.lastIndex++;
   }
   
   // The result can be accessed through the `m`-variable.
   m.forEach((match, groupIndex) => {
       console.log(`Found match, group ${groupIndex}: ${match}`);
   });
}
источник

TG

Timofey Goncharov in JavaScript — русскоговорящее сообщество
Victor Rusakovich
const regex = /\n\n\n(.*)\n\n\n/gm;
const str = `hew


CAPTURED  


sfsdfsd

fsdfsdf

`;
let m;

while ((m = regex.exec(str)) !== null) {
   // This is necessary to avoid infinite loops with zero-width matches
   if (m.index === regex.lastIndex) {
       regex.lastIndex++;
   }
   
   // The result can be accessed through the `m`-variable.
   m.forEach((match, groupIndex) => {
       console.log(`Found match, group ${groupIndex}: ${match}`);
   });
}
это на каком языке)
источник

TG

Timofey Goncharov in JavaScript — русскоговорящее сообщество
Victor Rusakovich
const regex = /\n\n\n(.*)\n\n\n/gm;
const str = `hew


CAPTURED  


sfsdfsd

fsdfsdf

`;
let m;

while ((m = regex.exec(str)) !== null) {
   // This is necessary to avoid infinite loops with zero-width matches
   if (m.index === regex.lastIndex) {
       regex.lastIndex++;
   }
   
   // The result can be accessed through the `m`-variable.
   m.forEach((match, groupIndex) => {
       console.log(`Found match, group ${groupIndex}: ${match}`);
   });
}
а почему так не работает
источник

И

Игорь in JavaScript — русскоговорящее сообщество
Timofey Goncharov
ну флаг справа s
Еще раз: я хз как там в ваших JS. Наверняка там тоже можно. Вопрос по регуляркам был, по регуляркам этот кусок даст тебе результат, который ты хотел.

Можешь здесь вставить и выполнить: https://www.jdoodle.com/execute-perl-online/

#!/usr/bin/perl

use strict;
use warnings;

my $test = 'test

line 1
line 2

test
';

if ($test =~ /^.*\n\n(.+)\n\n.*$/s) {
   print $1;
}


наверное, s флага нет в том языке в котором ты проверяешь на https://regex101.com/
источник

И

Игорь in JavaScript — русскоговорящее сообщество
Alexey Ermakov
в js регулярки немного кастрированы по сравнению с нормальными языками
Кстати, ради интереса зашел, проверил на том-же https://regex101.com/ для JS.

Конкретно по этой задаче JS отлично справляется.
источник

И

Игорь in JavaScript — русскоговорящее сообщество
Группу нашел
источник

И

Игорь in JavaScript — русскоговорящее сообщество
источник

И

Игорь in JavaScript — русскоговорящее сообщество
Timofey Goncharov
ну флаг справа s
Что в твоем понимании "не работает"?
Вот пример, который я писал, но для JS. И флаг есть и регулярку не менял: https://regex101.com/r/Re3ejU/1/

Группу 1 отлично нашел.
источник

TG

Timofey Goncharov in JavaScript — русскоговорящее сообщество
Игорь
Что в твоем понимании "не работает"?
Вот пример, который я писал, но для JS. И флаг есть и регулярку не менял: https://regex101.com/r/Re3ejU/1/

Группу 1 отлично нашел.
а, по группе нельзя)))
источник

И

Игорь in JavaScript — русскоговорящее сообщество
Timofey Goncharov
а, по группе нельзя)))
Что значит нельзя? Ты же сам писал, что хочешь найти то, что между \n\n и \n\n. Оно находит и сохраняет в $1.
источник

TG

Timofey Goncharov in JavaScript — русскоговорящее сообщество
Игорь
Что значит нельзя? Ты же сам писал, что хочешь найти то, что между \n\n и \n\n. Оно находит и сохраняет в $1.
хм, я вот так сделал)
источник

TG

Timofey Goncharov in JavaScript — русскоговорящее сообщество
вчера вроде писал тоже самое, не получилось почему-то
источник

AE

Alexey Ermakov in JavaScript — русскоговорящее сообщество
в лукахед и лукбехайнд  .* не обязательно
источник