2016-02-22 3 views
2

Я использую следующее регулярное выражение для замены HTML-тегов с тем же тегом HTML плюс разрывом строки:Разрыв строки в конце HTML-тегов?

content = content.replace(new RegExp('(</.*?>)', 'gi'), '$1 \n').replace(/\/>/g,'/> \n'); 

Вот что происходит на моем сайте:

Я пишу текст. Я копирую текст. Я вставляю в div и выполняется выше, что добавляет разрывы строк. Затем я копирую этот текст из div. Затем я добавляю больше контента и повторяю процесс.

Проблема заключается в том, что при повторном выполнении копирования и вставки снова добавляется следующий разрыв строки. Поэтому во второй раз я делаю вышеизложенное, я получаю два разрыва строки, третий раз, три разрыва строки и т. Д.

Как я могу сделать вышеуказанное выражение заменять теги тегами и разрывами строк и игнорировать (или заменять их) теги, которые уже имеют разрывы строк.

+0

Можете ли вы использовать jquery для этого? – Vixed

ответ

1

Вы можете попробовать это:

var content = "<Test>Test</Test><Test2>Test2</Test2><Test3 /><Test4>Test4</Test4>"; 
 
var regexTest = new RegExp('(</.*?>)(?!\\n.*)', 'gi'); 
 
var regexTest2 = new RegExp('/>(?!\\n.*)', 'g'); 
 
content = content.replace(regexTest, '$1\n').replace(regexTest2,'/>\n'); 
 
alert(content); 
 
content = content.replace(regexTest, '$1\n').replace(regexTest2,'/>\n'); 
 
alert(content); 
 
//remove linebreaks 
 
content = content.replace(/\n/g, ''); 
 
alert(content);

Это добавляет отрицательный предпросмотр (?!...) поэтому он проверяет, чтобы убедиться, что там нет уже \n. Если вы избавитесь от пространства между $1 и \n и /> и \n то вам не нужно \\s в регулярных выражениях ...

+0

@panthro Я обновил ответ ... Если у вас есть вопросы, просто спросите. – brso05

+0

Спасибо за обновление почти там, я думаю - просто он пренебрегает этим: replace (/ \ />/g, '/> \ n'); – panthro

+0

Для того, чтобы справиться с тегами самозащиты. – panthro

-1

Это находит и заменяет все теги с тегом и новой строки.
Он соответствует тегу в группе 1 и, по выбору, соответствует одной дополнительной новой строке
, которая удаляется, а затем добавляется обратно на замену.

content = content.replace(/(<(?:(?:\/?[\w:]+\s*\/?)|(?:[\w:]+\s+(?:(?:(?:"[\S\s]*?")|(?:'[\S\s]*?'))|(?:[^>]*?))+\s*\/?)|\?[\S\s]*?\?|(?:!(?:(?:DOCTYPE[\S\s]*?)|(?:\[CDATA\[[\S\s]*?\]\])|(?:--[\S\s]*?--)|(?:ATTLIST[\S\s]*?)|(?:ENTITY[\S\s]*?)|(?:ELEMENT[\S\s]*?))))>)(?:\r?\n)?/g, '$1\n'); 
+0

Вы уже пробовали это? – sln