如何从 html 字符串中删除包括文本在内的所有内容,但<a>使用正则表达式保持所有标签及其数据不变?



首先,我想对比我更有经验的人说,它必须在正则表达式中完成。由于奇怪的情况,无法访问DOM解析器。

所以我有一个完整的HTML/XHTML字符串,并希望从中剥离除链接以外的所有内容。基本上只有<a>标签是重要的。我需要标签充分保持他们的信息,所以href,目标,类等,它应该工作,如果它是一个自我终止标签,或者如果它有一个单独的结束标签。即<a /><a></a>

谢谢你们的帮助!

当然,您可以在Firefox扩展中解析HTML。看看HTML到DOM,特别是第二和第三种方式。

它可能看起来更复杂,但它比正则表达式更不容易出错。

一旦您有了对已解析内容的引用,您所要做的就是调用ref.getElementsByTagName('a'),然后就完成了。

result = subject.match(/<a[^<>]*?(?:/>|>(?:(?!</a>).)*</a>)/ig);

获得HTML源中所有<a>标记的数组(甚至是非法但您特别要求的自关闭标记)。这就足够了吗?

解释:

<a         # Match <a
[^<>]*?    # Match any characters besides angle brackets, as few as possible
(?:        # Now either match
 />        # /> (self-closed tag)
|          # or 
 >         # a closing angle bracket
 (?:       # followed by...
  (?!</a>) # (if we're not at the closing tag)
  .        # any character
 )*        # any number of times
 </a>      # until the closing tag
)

正则表达式将看起来像这样

/<a.*[/]{0,1}>(.*</a>){0,1}/gm

最新更新