Javascript正则表达式删除不需要的<br/>,

时间:2012-10-11 11:51:42

标签: javascript jquery regex

我有像这样的JS搅拌 &lt;div id="grouplogo_nav"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ul&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;&lt;a class="group_hlfppt" target="_blank" href="http://www.hlfppt.org/"&gt;&amp;nbsp;&lt;/a&gt;&lt;/li&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ul&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;

我需要删除仅在<br>$nbsp;之间的所有&gt;&lt;。我试着写一个正则表达式,但没有把它弄好。有没有人有解决方案。

编辑:

请注意我只想删除标签b / w &gt;&lt;

6 个答案:

答案 0 :(得分:3)

避免在html上使用正则表达式!

尝试从字符串创建临时div,并使用DOM从中删除任何br标记。这比用正则表达式解析html要强大得多,可以是harmful to your health

var tempDiv = document.createElement('div');
tempDiv.innerHTML = mystringwithBRin;
var nodes = tempDiv.childNodes;
for(var nodeId=nodes.length-1; nodeId >= 0; --nodeId) {
    if(nodes[nodeId].tagName === 'br') {
        tempDiv.removeChild(nodes[nodeId]);
    }
}
var newStr = tempDiv.innerHTML;

请注意,我们在子节点上反向迭代,以便在删除给定的子节点后节点ID仍然有效。

http://jsfiddle.net/fxfrt/

答案 1 :(得分:2)

myString = myString.replace(/^(&nbsp;|<br>)+/, '');

...其中/.../表示正则表达式,^表示字符串的开头,($nbsp;|<br>)表示"&nbsp;<br>",+表示“1或更多出现前一个表达“。然后简单地用空字符串替换完整匹配。

答案 2 :(得分:1)

s.replace(/(&gt;)(?:&nbsp;|<br>)+(\s?&lt;)/g,'$1$2');

不要在生产中使用它。请参阅Phil H的答案。

编辑:我试着解释一下,希望我的英语能够用得好。

基本上我们在这里有两种不同的括号。第一对和第三对()是正常括号。它们用于记住由封闭模式匹配的字符并将字符组合在一起。对于第二对,我们不需要记住这些字符供以后使用,因此我们使用(?:)形式禁用“记住”功能,并仅对字符进行分组以使+工作为预期。 +量词表示“一次或多次出现”,因此&nbsp;<br>必须存在一次或多次。最后一部分(\s?&lt;)匹配空白字符(\s),该字符可能丢失或出现一次(?),后跟字符&lt;$1$2是由第一和第三个括号中记住的字符替换的变量。

MDN提供nice table,其中解释了所有特殊字符。

答案 3 :(得分:0)

您需要全局替换。另外不要忘记你可以关闭。试试这个:

myString = myString.replace(/(&nbsp;|<br>|<br \/>)/g, '');

答案 4 :(得分:0)

这对我有用,请注意多行

myString = myString.replace(/(&nbsp;|<br>|<br \/>)/gm, '');

答案 5 :(得分:-1)

myString = myString.replace(/^(&nbsp;|<br>)+/, '');

希望这会有所帮助