Помогите нубу с регуляркой!
Есть дурацкие строки.
Строка состоит из следующих частей [<начало>][<табуляции>]<символы>\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,
trimLeft() ? |
voraa,
str = str.replace(/^\s+/mig, '') |
voraa, как вариант...
let re=/[\s]{0,2}строка$/; let str='начало строка'; alert('"'+str.match(re)+'"'); |
Нет.
Не все так просто. см пост 2 Надо оставить последнюю группу табуляций, которая предшествует символам строки (включая пробелы). Т.е если есть часть "\t\t string", то ее оставляем. Для облегчения задачи можно и \n отбросить. Сам split ом разделю строку по \n |
Цитата:
Так сколько пробелов или табуляций тебе нужно оставлять перед "строка"? |
Вот так будут оставлены все пробелы и табуляции
let re=/[\s]*строка$/; let str='начало строка'; alert('"'+str.match(re)+'"'); |
Цитата:
то "\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) |
Цитата:
let re=/\t*\s*строка$/; let str='начало строка'; alert('"'+str.match(re)+'"'); |
Цитата:
|
voraa,
проверь str = str.replace(/^\s+?(?=\t+\s+?\S)/mig, '') |
рони,
не. Совсем не работает const r = /^\s+?(?=\t+\s+?\S)/mig console.log([...'\n\t \n\t\t Журнал'.replace(r, '')]) console.log([...' \t \t\tЖурнал'.replace(r, '')]) Первый вывод дает [" ", " ", "Ж", "у", "р", "н", "а", "л"] А должен перед Ж оставить \t\t и пробел Второй вывод дает [" ", " ", " ", " ", "Ж", "у", "р", "н", "а", "л"] А должен перед Ж оставить \t\t |
voraa,
console.log("\n\t \n\t\t Журнал".replace(/^\s*?(?=\t+\s?\S)/mig, '').replace(/\t/mig, 'T')) console.log(" \t \t\tЖурнал".replace(/^\s*?(?=\t+\s?\S)/mig, '').replace(/\t/mig, 'T')) console.log("\t\tЖурнал".replace(/^\s*?(?=\t+\s?\S)/mig, '').replace(/\t/mig, 'T')) const r = /^\s*?(?=\t+\s?\S)/mig console.log([...'\n\t \n\t\t Журнал'.replace(r, '')]) console.log([...' \t \t\tЖурнал'.replace(r, '')]) |
<body> <pre> <script> const rs = /^\s+?(?=\t+\s+?\S)/mig let s2 = '\n\t \n\t\t Журнал' document.writeln(s2.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s3 = '\n\t\n\t\tЖурнал' document.writeln(s3.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s4 = ' \t \t\tЖурнал' document.writeln(s4.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) </script> </pre> </body> У меня выводит TSЖурнал TTЖурнал TSTTЖурнал https://drive.google.com/file/d/19ta...F8GPwmNLC/view Бред какой то. |
voraa,
#14 TTSЖурнал TTЖурнал TTЖурнал |
voraa,
<pre> <script> const rs = /^\s*?(?=\t+[ ]*\S)/mig; let s2 = '\n\t \n\t\t Журнал' document.writeln(s2.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s3 = '\n\t\n\t\tЖурнал' document.writeln(s3.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s4 = ' \t \t\tЖурнал' document.writeln(s4.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) </script> </pre> |
Вот я и говорю, что бред.
Пост 14. Что в форумском варианте, что локально делаю, все равно TSЖурнал TTЖурнал TSTTЖурнал Хоть в запой уходи. Не заметил сразу, что исправлено на [ ]. Так вроде работает! Но еще попроверяю. |
voraa,
#17 скопируй строку 3, может поможет? ))) |
рони,
Предыдущие примеры сработали Дальше опять неудача Цитата:
<pre> <script> const rs = /^\s+?(?=\t+[ ]*?\S)/mig let s5 = ' \t \n Журнал' document.writeln(s5.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s6 = '\t\tЖурнал' document.writeln(s6.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) </script> </pre> |
voraa,
:) <pre> <script> const rs = /^\s*?(?=\t+[ \n]*?\S)/mig let s2 = '\n\t \n\t\t Журнал' document.writeln(s2.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s3 = '\n\t\n\t\tЖурнал' document.writeln(s3.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s4 = ' \t \t\tЖурнал' document.writeln(s4.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s5 = ' \t \n Журнал' document.writeln(s5.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s6 = '\t\tЖурнал' document.writeln(s6.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) </script> </pre> |
Не
5 вариант не идет. Там должно быть SЖурнал Вроде нормальная проблема. Есть строковое значение, состоящее из многих строк, разделенных \n Надо убрать первые пустые строки (если они есть) Пустые - не содержащие ничего, кроме \t и пробелов А вот со строкой, которая не пустая, не могу понять, как там убирать надо. Хотел убирать в начале строки все, до последней группы табуляций (если она есть). А если ее нет, и там одни пробелы, то их вроде как оставить надо. |
Цитата:
<pre> <script> const rs = /^\s*?\n?(?=\t*[ ]*\S)/mig; let s2 = '\n\t \n\t\t Журнал' document.writeln(s2.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s3 = '\n\t\n\t\tЖурнал' document.writeln(s3.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s4 = ' \t \t\tЖурнал' document.writeln(s4.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s5 = ' \t \n Журнал' document.writeln(s5.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) let s6 = '\t\tЖурнал' document.writeln(s6.replace(rs, '').replace(/\t/g, 'T').replace(/\s/g, 'S')) </script> </pre> |
А я так сделал
<pre> <script> const rs = /^(\s*?)(\t*[ ]*\S(.|\n)*)/ let s1 = 'Журнал\n газета' document.writeln(s1.replace(rs,'$2').replace(/[ ]/g, 'S').replace(/\t/g, 'T').replace(/\n/g, 'N')) let s2 = '\n\t \n\t\t Журнал\nгазета' document.writeln(s2.replace(rs,'$2').replace(/[ ]/g, 'S').replace(/\t/g, 'T').replace(/\n/g, 'N')) let s3 = '\n\t\n\t\tЖурнал\n\tгазета' document.writeln(s3.replace(rs,'$2').replace(/[ ]/g, 'S').replace(/\t/g, 'T').replace(/\n/g, 'N')) let s4 = ' \t \n\t Журнал\n\t\t газета' document.writeln(s4.replace(rs,'$2').replace(/[ ]/g, 'S').replace(/\t/g, 'T').replace(/\n/g, 'N')) let s5 = '\t\tЖурнал\n\t\t газета' document.writeln(s5.replace(rs,'$2').replace(/[ ]/g, 'S').replace(/\t/g, 'T').replace(/\n/g, 'N')) let s6 = ' Журнал\n\t\t газета' document.writeln(s6.replace(rs,'$2').replace(/[ ]/g, 'S').replace(/\t/g, 'T').replace(/\n/g, 'N')) let s7 = '\n\t\n Журнал\n\t\t газета' document.writeln(s7.replace(rs,'$2').replace(/[ ]/g, 'S').replace(/\t/g, 'T').replace(/\n/g, 'N')) </script> </pre> |
Часовой пояс GMT +3, время: 09:06. |