Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.03.2021, 15:55
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Помогите нубу с регуляркой!
Есть дурацкие строки.
Строка состоит из следующих частей
[<начало>][<табуляции>]<символы>\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"
Ответить с цитированием
  #2 (permalink)  
Старый 20.03.2021, 16:18
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Алгоритмически это так - Находим первый печатный символ, от него отступаем назад, пока пробелы, потом отступаем назад, пока табуляции. Все, что осталось вначале удаляем.
Но хотелось бы регуляркой.
Ответить с цитированием
  #3 (permalink)  
Старый 20.03.2021, 16:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

voraa,
trimLeft() ?
Ответить с цитированием
  #4 (permalink)  
Старый 20.03.2021, 16:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

voraa,
str = str.replace(/^\s+/mig, '')
Ответить с цитированием
  #5 (permalink)  
Старый 20.03.2021, 16:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

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

let re=/[\s]{0,2}строка$/;
let str='начало строка';
alert('"'+str.match(re)+'"');
Ответить с цитированием
  #6 (permalink)  
Старый 20.03.2021, 16:51
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

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

Для облегчения задачи можно и \n отбросить. Сам split ом разделю строку по \n
Ответить с цитированием
  #7 (permalink)  
Старый 20.03.2021, 16:57
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от voraa
"\t \t строка\n" => "\t строка\n"
Так ты ранее писал...
Так сколько пробелов или табуляций тебе нужно оставлять перед "строка"?
Ответить с цитированием
  #8 (permalink)  
Старый 20.03.2021, 16:58
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Вот так будут оставлены все пробелы и табуляции
let re=/[\s]*строка$/;
let str='начало       строка';
alert('"'+str.match(re)+'"');
Ответить с цитированием
  #9 (permalink)  
Старый 20.03.2021, 17:10
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Сообщение от ksa Посмотреть сообщение
Так ты ранее писал...
Так сколько пробелов или табуляций тебе нужно оставлять перед "строка"?
Ну если как \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)
Ответить с цитированием
  #10 (permalink)  
Старый 20.03.2021, 17:17
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с регуляркой bms.java Общие вопросы Javascript 5 08.06.2017 12:06
помогите с регуляркой, пожалуйста lvovitch Общие вопросы Javascript 3 11.11.2015 08:24
Помогите разобраться с регуляркой shtormIK Общие вопросы Javascript 6 26.06.2012 20:02
Помогите нубу Fongolcs Работа 34 19.05.2010 22:45