2013-12-13 92 views
1

我想從字符串中刪除不必要的字符串:<br>,<br/><br />,該字符串可能包含行中的許多字符串。例如:從字符串中刪除多餘的<br>'

This is a string with <br><br/> many <br/><br> newlines. <br><br><br /><br> But it's ok <br> to have one!

我想它變成這樣:

This is a string with <br> many <br> newlines. <br> But it's ok <br> to have one!

回答

3

你可以做

str = str.replace(/<\/?br\s*\/?>\s*(<\/?br\s*\/?>)+/ig, '<br>'); 
+0

這也重複後'br's(也忽略'br's帶屬性) –

+1

工作以及消除任何空間! http://jsfiddle.net/tYM4M/1/ –

+0

的downvotes是最有可能的純意識形態,因爲你使用正則表達式來操作HTML –

2
var str = "This is a string with <br><br/> many <br/><br> newlines. <br><br><br /><br> But it's ok <br> to have one!"; 
var cleaned = str.replace(/(<br\s?\/?>\s?)+/g,"<br/> "); 

而且現在的壞消息,這是真的用正則表達式匹配HTML標籤是一個壞主意。看到這個問題:RegEx match open tags except XHTML self-contained tags

另一種方法是將它設置爲一個元素,遍歷節點和刪除標記。

快速和粗糙的代碼,並沒有做大量的測試在這個

function removeDupeBrs (elem) { 
    var childrenNodes = elem.childNodes; 
    for (var i = childrenNodes.length-1; i>=0 ; i--) { 
     var cn = childrenNodes[i]; 
     if (cn.nodeType===1 && cn.tagName==="BR") { 
      var next = childrenNodes[i-1]; 
      if (next && next.nodeType===1 && next.tagName==="BR") { 
       elem.removeChild(cn);     
      } 
     } 
    }  
} 

var str = "This is a string with <br><br/> many <br/><br> newlines. <br><br><br /><br> But it's ok <br> to have one!"; 
var div = document.createElement("div"); 
div.innerHTML = str; 
removeDupeBrs(div); 
console.log(div.innerHTML); 
+1

這與Dystroy的答案有什麼不同? –

+0

@JanDvorak因爲我寫答案的時候有沒有一個答案,並張貼...... – epascarello

+0

但你爲什麼它張貼在Dystroy的答案是完全一樣的? –