5

我有一个像这样的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;and之间的内容&lt;。我试图写一个正则表达式,但没有做对。有没有人有解决方案。

编辑 :

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

4

6 回答 6

3

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

尝试从字符串创建一个临时 div,并使用 DOM 从中删除任何br标签。这比使用正则表达式解析 html 更加健壮,这可能对您的健康有害

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/

于 2012-10-11T12:25:28.327 回答
2
myString = myString.replace(/^(&nbsp;|<br>)+/, '');

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

于 2012-10-11T11:53:14.553 回答
1
s.replace(/(&gt;)(?:&nbsp;|<br>)+(\s?&lt;)/g,'$1$2');

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

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

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

MDN 提供了一个很好的表格,它解释了所有的特殊字符。

于 2012-10-11T12:33:01.507 回答
0

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

myString = myString.replace(/(&nbsp;|<br>|<br \/>)/g, '');
于 2012-10-11T11:56:16.040 回答
0

这对我有用,请注意多行

myString = myString.replace(/(&nbsp;|<br>|<br \/>)/gm, '');
于 2020-07-29T07:02:22.523 回答
-1
myString = myString.replace(/^(&nbsp;|<br>)+/, '');

希望这可以帮助

于 2012-10-11T11:54:20.390 回答