регулярное выражение заменить первый элемент

1

У меня есть необходимость заменить HTML содержимое строки из одного <br> до двух. Но чего я не могу достичь, когда у меня есть один тег, следующий за другим:

(<br\s*\/?>)

будет соответствовать всем тегам в этом тексте:

var text = 'text<BR><BR>text text<BR>text;'

будет соответствовать, и с заменой я буду

text = text.replace.replace(/(<br\s*\/?>)>/gi, "<BR\/><BR\/>")

console.log(text); //text<BR/><BR/><BR/><BR/>text text<BR/><BR/>text;"

Есть ли способ только увеличить один тег с помощью регулярного выражения? И достичь этого:

console.log(text); //text<BR/><BR/><BR/>text text<BR/><BR/>text;"

Или я только добьюсь этого с помощью цикла?

  • 0
    Хотите использовать жесткий код <BR/> в замене? Разве вы не хотите просто добавить тот же самый br который использовался последним в последовательности? Я только что попробовал и получил text<BR><BR><BR>text text<BR><BR>text;
  • 0
    что вы хотите в качестве вывода?
Показать ещё 2 комментария
Теги:
replace

2 ответа

2
Лучший ответ

Вы можете использовать либо

var text = 'text<BR><BR>text text<BR>text;'
text = text.replace(/(<br\s*\/?>)+/gi, "$&$1");
console.log(text); // => text<BR><BR><BR>text text<BR><BR>text;

Здесь (<br\s*\/?>)+/gi соответствует 1 или более последовательностям <br> в случае нечувствительным образом во время захвата каждой метки на своем пути (сохраняя последнее значение в группе beffer после последнего его и "$&$1" заменит весь матч ($&) и добавит последний <br> с $1.

Или же

var text = 'text<BR><BR>text text<BR>text;'
text = text.replace(/(?:<br\s*\/?>)+/gi, function ($0) {
 return $0.replace(/<br\s*\/?>/gi, "<BR/>") + "<BR/>";
})
console.log(text); // => text<BR/><BR/><BR/>text text<BR/><BR/>text;

Здесь (?:<br\s*\/?>)+ также будет соответствовать 1 или более <br> но без захвата каждого вхождения, так и внутри обратного вызова, все <br> получите нормированы <BR/> и к результату <BR/>.

0

Вы можете использовать негативный взгляд вперед (<br\s*\/?>)(?!<br\s*\/?>)/ Для увеличения только последнего тега, если есть последовательные:

var text = 'text<BR><BR>text text<BR>text;'

text = text.replace(/(<br\s*\/?>)(?!<br\s*\/?>)/gi, "<BR\/><BR\/>")

console.log(text);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню