Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите нубу с регуляркой! (https://javascript.ru/forum/misc/82144-pomogite-nubu-s-regulyarkojj.html)

voraa 20.03.2021 15:55

Помогите нубу с регуляркой!
 
Есть дурацкие строки.
Строка состоит из следующих частей
[<начало>][<табуляции>]<символы>\n
<начало> - последовательность из пробелов, \n, \t (необязат. часть)
<табуляции> - последовательность только из \t (необязат. часть)
<символы> - всякие печатные символы, включая пробел

Нужно удалить часть <начало>.
Т.е.
"строка\n" => "строка\n"
"\n \nстрока\n" => "строка\n"
" \n\t \nстрока\n" => "строка\n"
" \n\t \n\t\tстрока\n" => "\t\tстрока\n"
"\t\tстрока\n" => "\t\tстрока\n"
"\t \t строка\n" => "\t строка\n"

voraa 20.03.2021 16:18

Алгоритмически это так - Находим первый печатный символ, от него отступаем назад, пока пробелы, потом отступаем назад, пока табуляции. Все, что осталось вначале удаляем.
Но хотелось бы регуляркой.

рони 20.03.2021 16:32

voraa,
trimLeft() ?

рони 20.03.2021 16:36

voraa,
str = str.replace(/^\s+/mig, '')

ksa 20.03.2021 16:45

voraa, как вариант...

let re=/[\s]{0,2}строка$/;
let str='начало строка';
alert('"'+str.match(re)+'"');

voraa 20.03.2021 16:51

Нет.
Не все так просто. см пост 2
Надо оставить последнюю группу табуляций, которая предшествует символам строки (включая пробелы).
Т.е если есть часть
"\t\t string", то ее оставляем.

Для облегчения задачи можно и \n отбросить. Сам split ом разделю строку по \n

ksa 20.03.2021 16:57

Цитата:

Сообщение от voraa
"\t \t строка\n" => "\t строка\n"

Так ты ранее писал... :)
Так сколько пробелов или табуляций тебе нужно оставлять перед "строка"?

ksa 20.03.2021 16:58

Вот так будут оставлены все пробелы и табуляции
let re=/[\s]*строка$/;
let str='начало       строка';
alert('"'+str.match(re)+'"');

voraa 20.03.2021 17:10

Цитата:

Сообщение от ksa (Сообщение 534792)
Так ты ранее писал... :)
Так сколько пробелов или табуляций тебе нужно оставлять перед "строка"?

Ну если как \s обозначить только пробел,
то
"\t\s\t\sстрока\n" => "\t\sстрока\n"
"\t\s\t\t\sстрока\n" => "\t\t\sстрока\n"
"\t\s\t\t\s\sстрока\n" => "\t\t\s\sстрока\n"

Перед первым печатным символом оставляем все пробелы, а перед ними все табуляции.
(В регулярке под \s подходят и пробелы и \t и \r и \n)

<начало> - последовательность из пробелов, \n, \t (необязат. часть) (пост 1)

ksa 20.03.2021 17:17

Цитата:

Сообщение от voraa
Перед первым печатным символом оставляем все пробелы, а перед ними все табуляции.

Как вариант...

let re=/\t*\s*строка$/;
let str='начало       строка';
alert('"'+str.match(re)+'"');


Часовой пояс GMT +3, время: 15:51.