Regexp to remove all html tags except <br>
Regexp to remove all html tags except <br>
我正在尝试用javascript制作一个regexp,以从输入字符串中删除除<br>
之外的所有html标记。
我使用/(<([^>]+)>)/ig
作为标签,并尝试了一些方法,如添加[^(br)],但我现在只是感到困惑。
有人能帮忙吗?我相信这将是SO大师之间的速度竞赛,所以如果答案解释了这个表达的逻辑,我会选择它而不是其他表达。
编辑:
对于所有"不要这么做"的人,让我引用Stack Overflow 中的以下内容
虽然要求正则表达式解析任意HTML就像要求Paris Hilton编写操作系统一样,但有时解析一组有限的已知HTML是合适的。
在这种特殊情况下,它是div中的一堆文本,在许多页面中保持一致。我只想去掉少数情况(最多1%),其中用户包括跨度、strong和其他一些格式标记。它不值得花更多的时间来正则表达式,因为它几乎不会在我处理的数千页中发生。如果你有一个更好、更快实现的想法,请随时将其作为答案发布;)
编辑2
这么多评论,我想添加一个免责声明:使用Regexp解析HTML是非常糟糕的。它不会一直有效,而且还有更好的方法。Domparser已经被提及;Node.js上有Cheerio或jsdom,还有更多的库可以正确解析HTML文档(在99%的情况下)。在这种情况下,它更像是一个字符串,恰好包含一些我需要删除的<...>
。
试试这个:
/(<((?!br)[^>]+)>)/ig
使用DOMParser
解析字符串,然后遍历它(我在这个问题中使用了代码),提取您感兴趣的部分:
var str = "<div>some text <span>some more</span><br /><a href='#'>a link</a>";
var parser = new DOMParser();
var dom = parser.parseFromString(str, "text/html");
var text = "";
var walkDOM = function (node, func) {
func(node);
node = node.firstChild;
while (node) {
walkDOM(node,func);
node = node.nextSibling;
}
};
walkDOM(dom, function (node) {
if (node.tagName === 'BR') {
text += node.outerHTML;
}
else if (node.nodeType === 3) { // Text node
text += node.nodeValue;
}
});
alert(text);
这可能会奏效。但是,不管正则表达式是什么,它都无法解析html。
# /(?!<'/?br's*'/?>)<[^>]+>/g
(?! < /? br 's* /? > )
< [^>]+ >
我最终使用了:
.replace('<br>','%br%').replace(/(<([^>]+)>)/g,'')
然后我拆分了"%br%",而不是常规的br标记。它不是一个HTML解析器,我相信它将无法100%解析万维网,并且它100%地解决了我的特定问题(只是经过了尝试和测试)。
- 如何停止CKEditor用<br>
- 高亮显示包含<br>以及重新格式化网格
- jQuery:如何添加<br/>在不同的字符串中换行以分隔2中的句子
- 如何添加html<br>标记转换为javascript
- CKEDITOR-<p>而不是<br/>导致复制粘贴问题
- 将换行符替换为<br/>并将其保存到数据库中
- 替换' '其中<br>在JavaScript中
- 发现<br>使用window.getSelection在wysiwyg编辑器中定位
- 删除第一个和最后一个<br/>来自字符串
- jQuery:添加和删除<br>标签,这取决于窗口宽度以及标签是否已经存在
- HTML代码不工作<br>线
- Selenium IDE javascript正则表达式用<br>
- jquery:找到换行符并将其替换为<br>
- & lt; br>在alert()方法中删除PRE标记的内容
- 添加& lt; br>手机或特定分辨率下的标签
- 将文本区换行符转换为
和& lt; br /比;JavaScript标记
- & lt; br>在javascript和PHP中的两个变量之间
- 把& lt; br>使用javascript(不是php)插入换行符
- 转换& lt; br>到纯文本
- 如何使用
& lt; / tr>在& lt; br>为图像