2013-05-23 2 views
14

Я хочу удалить все теги html, кроме <br> или <br/> тегов из строки, используя javascript. Я видел много вопросов, подобных этому, но их ответы удалят все теги html, включая <br> и <br/> теги.Удалить html-теги, кроме <br> или <br/> теги с javascript

Кто-нибудь знает регулярное выражение?

+0

если нет нет
в любом месте, просто удалите другие HTML-теги. – cp100

+0

Даже если открыт, это дубликат [этого] (http://stackoverflow.com/a/828647/263858) и [этот] (http://stackoverflow.com/a/18128321/263858) –

+0

Возможный дубликат [Strip Html from Text в JavaScript, кроме p-тегов?] (Https://stackoverflow.com/questions/828572/strip-html-from-text-in-javascript-except-p-tags) – Wolfie

ответ

8

Try This

function remove_tags(html) 
{ 
    var html = html.replace("<br>","||br||"); 
    var tmp = document.createElement("DIV"); 
    tmp.innerHTML = html; 
    html = tmp.textContent||tmp.innerText; 
    return html.replace("||br||","<br>"); 
} 
+1

Это не самое большое решение, так как если html уже содержит «|| br ||», перед заменой все они превратятся в «
». Решение h2ooooooo является превосходным, так как оно не имеет этой проблемы. – Aura

34

Используйте отрицательный предпросмотр (с использованием регулярных выражений, таких как /<(?!br\s*\/?)[^>]+>/g):

var html = 'this is my <b>string</b> and it\'s pretty cool<br />isn\'t it?<br>Yep, it is. <strong>More HTML tags</strong>'; 
html = html.replace(/<(?!br\s*\/?)[^>]+>/g, ''); 

console.log(html); 
//this is my string and it's pretty cool<br />isn't it?<br>Yep, it is. More HTML tags 

Demo

+0

Очень аккуратное решение , Большое спасибо. Работает как шарм. – Logus

+0

Это не удалит тег '', существует ли простое изменение этого правила регулярного выражения, которое указывает, что 'br' должно быть само по себе оставаться? (очевидно, что это не допустимый тег HTML, но пытается быть исчерпывающим) – Wolfie

+0

@Wolfie Вы хотите только совместить '' и NOT '
'? [Этот ответ (в php, но регулярное выражение должно быть довольно идентичным) принимает все теги, начиная с br] (https://stackoverflow.com/a/20196175/247893). – h2ooooooo

5

Я работал над последним предложением разработать функция удаления всего или просто сохранение некоторых тегов

function strip_tags(_html /*you can put each single tag per argument*/) 
{ 
    var _tags = [], _tag = "" ; 
    for(var _a = 1 ; _a < arguments.length ; _a++) 
    { 
     _tag = arguments[_a].replace(/<|>/g, '').trim() ; 
     if (arguments[_a].length > 0) _tags.push(_tag, "/"+_tag); 
    } 

    if (!(typeof _html == "string") && !(_html instanceof String)) return "" ; 
    else if (_tags.length == 0) return _html.replace(/<(\s*\/?)[^>]+>/g, "") ; 
    else 
    { 
     var _re = new RegExp("<(?!("+_tags.join("|")+")\s*\/?)[^>]+>", "g"); 
     return _html.replace(_re, ''); 
    } 
} 

var _html = "<b>Just</b> some <i>tags</i> and text to test <u>this code</u>" ; 
document.write("This is the original html code including some tags<br>"); 
document.write(_html + "<br><br>"); // original html code 
document.write("Now we remove all tags (plain text)<br>"); 
document.write(strip_tags(_html) + "<br><br>"); // remove all tags 
document.write("Only the bold tag is kept<br>"); 
document.write(strip_tags(_html, "b") + "<br><br>"); // keep <b> only 
document.write("Only the underline tag is kept<br>"); 
document.write(strip_tags(_html, "u") + "<br><br>"); // keep <u> only 
document.write("Only the italic tag is kept<br>"); 
document.write(strip_tags(_html, "<i>") + "<br><br>"); // keep <i> only 
document.write("Keeping both italic and underline<br>"); 
document.write(strip_tags(_html, "i", "u")); // keep both <i> and <u> 
1

Для расширения h2ooooooo ответа включить ведущие пробелы и быть случай insenctive вы можете использовать

/<(?!\s*br\s*\/?)[^>]+>/gi 
Смежные вопросы