2013-05-23 38 views
14

Tôi muốn xóa tất cả các thẻ html trừ các thẻ <br> hoặc <br/> khỏi chuỗi bằng javascript. Tôi đã thấy nhiều câu hỏi như thế này nhưng câu trả lời của họ sẽ xóa tất cả các thẻ html bao gồm các thẻ <br><br/>.Xóa thẻ html trừ các thẻ <br> hoặc <br/> bằng javascript

Có ai biết regex để làm điều này không?

+0

nếu không có
bất cứ nơi nào, chỉ cần loại bỏ các thẻ html khác. – cp100

+0

Ngay cả khi được mở, đây là bản sao của [this one] (http://stackoverflow.com/a/828647/263858) và [this one] (http://stackoverflow.com/a/18128321/263858) –

+0

Có thể trùng lặp của [Dải Html từ Văn bản trong JavaScript ngoại trừ thẻ p?] (Https://stackoverflow.com/questions/828572/strip-html-from-text-in-javascript-except-p-tags) – Wolfie

Trả lời

8

Hãy thử này

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

Đây không phải là giải pháp lớn nhất kể từ khi html đã chứa "|| br ||" trước khi thay thế, tất cả chúng sẽ biến thành "
". Giải pháp của h2ooooooo là tốt hơn vì nó không có vấn đề này. – Aura

34

Sử dụng một lookahead tiêu cực (bằng cách sử dụng một regex như /<(?!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

Giải pháp rất gọn gàng . Cảm ơn rất nhiều. Làm việc như một say mê. – Logus

+0

Thao tác này sẽ không xóa thẻ '', có một chỉnh sửa đơn giản đối với quy tắc regexp này mà chỉ định 'br' phải được giữ nguyên không? (rõ ràng đây không phải là thẻ HTML hợp lệ, nhưng cố gắng toàn diện) – Wolfie

+0

@Wolfie Bạn chỉ muốn khớp ' 'và KHÔNG'
'? [Câu trả lời này (bằng php nhưng regex phải khá giống nhau) chấp nhận tất cả các thẻ bắt đầu bằng br] (https://stackoverflow.com/a/20196175/247893). – h2ooooooo

5

tôi đã làm việc trên đề nghị cuối cùng để phát triển một chức năng xóa tất cả hoặc chỉ giữ một số thẻ

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

Mở rộng h2ooooooo trả lời bao gồm khoảng cách hàng đầu và là trường hợp insenctive bạn có thể sử dụng

/<(?!\s*br\s*\/?)[^>]+>/gi 
Các vấn đề liên quan