我得到了一些html文本,其中包含各种html标签,比如
<table>, <a>, <img>
等等。
现在我想使用正则表达式删除所有html标签,除了
<img ...>
和</img>
(和大写<IMG></IMG>
)。
如何做到这一点?
更新:
我的任务很简单,只是在首页打印一个html的文本内容(包括图像)作为摘要,所以我认为正则表达式很好而且很简单。
再次更新
也许示例会让我的问题更好地理解:)
有一些html文本:
<html>
<head></head>
<body>
Hello, everyone. Here is my photo: <img src="xxx.jpg" />.
And, <a href="xxx">know more</a> about me!
</body>
</html>
我想保留 ,并删除其他标签。以下是我想要的:
Hello, everyone. Here is my photo: <img src="xxx.jpg" />. And, know more about me!
现在我的代码是这样的:
html.replaceAll("<.*?>", "")
但是它会删除
<
和>
之间的所有内容,但我想保留<img xxx>
和</img>
,并删除< and >
之间的其他内容
谢谢大家!
我尝试了很多,这个正则表达式似乎对我有用:
(?i)<(?!img|/img).*?>
我的代码是:
html.replaceAll('(?i)<(?!img|/img).*?>', '');
Regexp 无法解析递归语法,例如:
S -> (S)
S -> Empty
因为这种语法有无限的状态。
由于 HTML 具有递归语法,您可以简单地使用正则表达式。
SPAN -> <span>SPAN</span>
SPAN -> text
但是在您的情况下,您可以表达非递归的正则表达式。
<(img|IMG)*>*</(img|IMG)>
const html = "<html>...</html>";
return html.replace(/<.*?>/ig, function (tag) {
if (tag.indexOf('<img ') === 0) {
return tag;
} else {
return '';
}
})
删除除以下标签之外的所有 html 标签:
<title>(.*?)<\/title>'
<meta name="description" content="(.*?)"/>'
<p>(.*?)<\/p>'
<h4 class="sc-jMKfon fhunKk">(.*?)<\/h4>'
<h2">(.*?)<\/h2>
<img(.*?)\/>
找到:<(?!\/?(title|meta|p|h2|img)\b)[^>]*>|<\/(?!title>|meta>|p>|h2>|>)[^>]+>
替换为: (leave empty)