Регулярное выражение для переноса отдельных строк длинного текста в пробел в JavaScript - PullRequest
0 голосов
/ 28 октября 2018

вот ситуация: у меня есть текст абзаца, скажем, 500 символов.Теперь я пытаюсь обернуть каждые 100 символов в теги span, чтобы иметь 5 диапазонов по 100 символов каждый.Сейчас я делаю это с помощью следующего регулярного выражения в JavaScript:

var target = "< 500 characters of example text here >"
var regex = new RegExp(".{1,100}", "g");
var replacement = target.replace(regex, function replace(match) { 
     return '<span>' + match + '</span>'; 
});

Это прекрасно работает, но проблема в том, что функция не заботится, если есть какой-то пробел или нет, и разрывает строку даже внутрислова.Поэтому я попытался переписать регулярное выражение, добавив положительный просмотр за проверкой наличия пробелов:

var regex = new RegExp(".{1,100}(?<=\s)", "g");

Он работает с онлайн-тестером / отладчиком регулярных выражений, но мой браузер выдает ошибку синтаксиса "недопустимое регулярное выражение"группа».Некоторое время я искал и понял, что JavaScript, возможно, не поддерживает позитивные взгляды.Я снова переписывал код, это было результатом:

var regex = new RegExp(".{1,100}(?=\s)", "g");

Опять же, он работает только с онлайн-тестером регулярных выражений, а не в моем проекте.Я не профессионал и не могу сказать, что регулярные выражения - это то, что я полностью понимаю.И, возможно, это не лучший способ решить мою проблему.Но я надеюсь, что кто-то может немного помочь мне с его подтверждением JavaScript или jQuery.

Best, Christian

1 Ответ

0 голосов
/ 28 октября 2018

Я хотел бы предложить некоторые улучшения для последней версии вашего регулярного выражения.

  1. Запустите регулярное выражение с \s*, причина будет понятна через мгновение.

  2. Поместите .{1,100} в качестве группы захвата (в скобках).Таким образом, и из-за исправления в пункте 1, вы можете скопировать только эту группу, без начальных "белых" символов в строках "продолжения".

  3. Чтобы правильно обслуживать последний кусок, возможно, без без пробела, напишите в качестве альтернативы заглядывание: либо последовательность «белых» символов, либо конец текста.

Таким образом, все регулярное выражение может быть:

\s*(.{1,100})(?=\s+|$)

И, конечно, как прокомментировал Pointy , обратная косая черта записи удвоилась.

...