我有像这样的JS搅拌
<div id="grouplogo_nav"><br> <ul><br> <li><a class="group_hlfppt" target="_blank" href="http://www.hlfppt.org/">&nbsp;</a></li><br> </ul><br> </div>
我需要删除仅在<br>
和$nbsp;
之间的所有>
和<
。我试着写一个正则表达式,但没有把它弄好。有没有人有解决方案。
编辑:
请注意我只想删除标签b / w >
和<
答案 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仍然有效。
答案 1 :(得分:2)
myString = myString.replace(/^( |<br>)+/, '');
...其中/.../
表示正则表达式,^
表示字符串的开头,($nbsp;|<br>)
表示"
或<br>"
,+表示“1或更多出现前一个表达“。然后简单地用空字符串替换完整匹配。
答案 2 :(得分:1)
s.replace(/(>)(?: |<br>)+(\s?<)/g,'$1$2');
不要在生产中使用它。请参阅Phil H的答案。
编辑:我试着解释一下,希望我的英语能够用得好。
基本上我们在这里有两种不同的括号。第一对和第三对()
是正常括号。它们用于记住由封闭模式匹配的字符并将字符组合在一起。对于第二对,我们不需要记住这些字符供以后使用,因此我们使用(?:)
形式禁用“记住”功能,并仅对字符进行分组以使+
工作为预期。 +
量词表示“一次或多次出现”,因此
或<br>
必须存在一次或多次。最后一部分(\s?<)
匹配空白字符(\s
),该字符可能丢失或出现一次(?
),后跟字符<
。 $1
和$2
是由第一和第三个括号中记住的字符替换的变量。
MDN提供nice table,其中解释了所有特殊字符。
答案 3 :(得分:0)
您需要全局替换。另外不要忘记你可以关闭。试试这个:
myString = myString.replace(/( |<br>|<br \/>)/g, '');
答案 4 :(得分:0)
这对我有用,请注意多行
myString = myString.replace(/( |<br>|<br \/>)/gm, '');
答案 5 :(得分:-1)
myString = myString.replace(/^( |<br>)+/, '');
希望这会有所帮助