Удалить разрывы строк и абзацев из текстовой области - PullRequest
2 голосов
/ 07 октября 2019

Я пытаюсь «сгладить» (удаление разрывов строк и абзацев) из любого заданного ввода из текстовой области.

Предположим, что ввод:

select * where { 
    ?s ?p ?o .
} limit 100 

Ожидаемый результат:

select * where { ?s ?p ?o . } limit 100 

Пока мне удалось удалить разрывы строк, используя следующий фрагмент кода:

val.replace(/$(\r|\n)(?=.)/gm, ' ');

в настоящее время дает мне:

select * where {    ?s ?p ?o . } limit 100

Есть мысли? Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 08 октября 2019

О CRLF:
- Как подсказывает @Unimportant, замените \s+ пробелом.
Причина в том, что форматирование результата не будет работать в любом случае.
Лучше быть совместимым с равномерным разделением,

О разбиениях на абзацы и разбиениях:
- будет заменить </?p\s*>|<br\s*/> ничем.

Итак, 2 отдельных регулярных выражения, выполняемых независимо друг от друга, будут выполнять эту работу.

1 голос
/ 07 октября 2019

Я бы предложил

val = val.replace(/[^\S\r\n]*[\r\n]+\s*/g, ' ')

Это сократит разрывы строк (включая любые последовательные пустые строки) с соседними пробелами в один пробел.

Здесь

  • [^\S\r\n]* - соответствует 0+ горизонтальных пробелов
  • [\r\n]+ - 1+ CR или LF-символов
  • \s* - любые 0+ белых символов.

См. Демоверсию regex .

1 голос
/ 07 октября 2019

Добавьте символ пробела \s к критериям соответствия, а также добавьте *, чтобы указать, что может быть более одного одновременного соответствия. Отсюда вы просто захотите заменить такие символы пустой строкой вместо пробела.

Это можно увидеть следующим образом:

const val = `select * where { 
    ?s ?p ?o .
} limit 100 `;

console.log(val.replace(/$(\r|\n|\s)*(?=.)/gm, ''));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...