我正在尝试删除除斜体,粗体或跨度标签以外的所有标签,并且似乎无法使其正常工作。
目前,我有:
/[^i|b|span]/g
我知道[]是范围,并且[span]将匹配s,p,a,n,而不是整个单词。
所以我的问题是如何陈述: not: "tag1" or "tag2"?
编辑我早些时候发现了“重复”问题,但并没有解决我的问题。
这应该至少在相当整齐的HTML上有效:
</?\s*(?!(i|b|span)\b)\w+[^>]*>
逐一解释(由http://rick.measham.id.au/paste/explain.pl提供):
NODE EXPLANATION
< literal '<'
/? '/' (optional)
\s* any whitespace (\n, \r, \t, \f, and " ") (0 or
more times (matching the most amount
possible))
(?! look ahead to see if there is not:
( start of OR'ed group
i 'i'
| OR
b 'b'
| OR
span 'span'
) end of the OR'ed group
\b the boundary between a word char (\w)
and something that is not a word char
) end of look-ahead
\w+ word characters (a-z, A-Z, 0-9, _) (1 or
more times (matching the most amount
possible))
[^>]* any character except: '>' (0 or more times
(matching the most amount possible))
> literal '>'
现在,这是用英语做什么的?
它
<
/
因为您想同时找到开始和结束标签(<body>
和</body>
)b
和开头的标签i
!括号后跟\b
是,以确保它仅与“或”列表中的“整个单词”匹配。\w+
是匹配遵循任何标记(其中,我想提醒你,可能不会有i
,b
或span
每负极前瞻)。>
可能不会出现这样的属性里面-它应该被编码为>
。因此,要在此标签的末尾匹配所有内容,请跳过所有不匹配的内容>
。>
,以配合比赛结束。为什么在顶部警告“ HTML整洁”?因为即使对HTML进行了详尽的描述,但手动输入HTML的软件和(alas)人员都不会遵守所有这些讨厌的规则。此正则表达式可能会出现一些可能的问题:
<br />
不会被抓住。>
属性值未转义。<img title="a > b">
会令人窒息–<img
标题的前半部分将被删除,而后半部分和最后一个>
字符将保留下来。<B>
使用</b>
-来打开和关闭-但默认情况下,正则表达式通常区分大小写。您的正则表达式风格可能带有“忽略大小写”标志;如果不是,则还需要添加大写字符。最好的解决方法是确保“放入”的HTML尽可能干净。您可以使用HTMLTidy之类的常用工具来预处理文件。更好的是:不要尝试使“ RegEx匹配除XHTML自包含标签以外的其他打开标签”。(将引用的文本粘贴到任何浏览器搜索引擎中以获得乐趣。)一种更好的解决方案是使用HTML解析器,并简单地踢出您不喜欢的标签。如果您的HTML实际上是(正确形成的)XHTML,则也可以使用XSLT(通用的XML处理器语言)来完成。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句