- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试解析 Excel 单元格中的 html 文本并删除一些部分。该文本可以包含不同的跨度样式、URL、类。我想最简单的方法是 RegEx。
我已经得到了六种类型的链接(例如。当然它们可能有不同的属性和值):
2 没有 anchor 且没有 <img>
(应选)
<a href="/"><span style="color: #000000;"></span></a>
<a href="/"></a>
2 没有 anchor ,有 <img>
(不应该选)
<a href="/" title=""><span style="color: #000000;"></span><img class="cars"></a>
<a href="/" title=""><img class="cars"></a>
和2个带 anchor (不应该选)
<a href="/"><span style="color: #000000;">Cars</span></a>
<a href="/">Cars</a>
我应该使用什么 RegEx 模式来标记没有 anchor 且没有 <img>
的 2 个链接只是?
我已经构建了模式
<a href=".*">(?!<img ".*">)(?:<\/span>)?<\/a>
标记两种类型的链接:
<a href="/" title=""><span style="color: #0000;"></span><img class="cars"></a>
<a href="/" title=""><img class="cars"></a>
包含 <img>
标签。
但如果删除 <img>
中的引号标签:
<a href="/" title=""><img class=cars></a>
它工作正常。
VBA代码:
Public Function txtrpl(ByRef x As String) As String`<br>
With CreateObject("VBScript.RegExp")`<br>
.Global = True`<br>
.Pattern = "<a href="".*"">(?!<img "".*"">)(?:<\/span>)?<\/a>"`<br>
txtrpl= Trim$(.Replace(x, ""))`<br>
End With
End Function
最佳答案
如果您考虑不使用正则表达式的解决方案,那么您可以使用HTMLDocument
目的。
你可以在VBE中添加一个引用(Microsoft HTML Object Library)来获取这个库,然后使用早期绑定(bind)。或者,对于我下面的示例代码,只需使用后期绑定(bind):
Dim objHtml As Object
Set objHtml = CreateObject("htmlfile")
我的示例传递一个字符串来创建 HTMLDocument
,您需要根据 this 使用后期绑定(bind)接受的答案。
无论如何,您可以使用 HTMLDocument
对象的方法和属性来检查 DOM - 我使用了 getElementsByTagName
、innerText
和innerHTML
获取您感兴趣的两个标签。例如:
' we want a tags without anchors and without img
For Each objElement In objElements
' innerText = "" is no anchor
If objElement.innerText = "" Then
' check for <img in innerHtml to avoid a tags with an image
If InStr(1, objElement.innerHtml, "<IMG", vbTextCompare) = 0 Then
Debug.Print objElement.outerHTML
End If
End If
Next objElement
完整示例:
Option Explicit
Sub ParseATags()
Dim strHtml As String
strHtml = ""
strHtml = strHtml & "<html>"
strHtml = strHtml & "<body>"
' 2 without anchors and without <img>
strHtml = strHtml & "<a href=""/""><span style=""color: #000000;""></span></a>"
strHtml = strHtml & "<a href=""/""></a>"
' 2 without anchors and with <img>
strHtml = strHtml & "<a href=""/"" title=""""><span style=""color: #000000;""></span><img class=""cars""></a>"
strHtml = strHtml & "<a href=""/"" title=""""><img class=""cars""></a>"
' and 2 with anchors
strHtml = strHtml & "<a href=""/""><span style=""color: #000000;"">Cars</span></a><br>"
strHtml = strHtml & "<a href=""/"">Cars</a><br>"
strHtml = strHtml & "</body>"
strHtml = strHtml & "</html>"
' must use late binding
' https://stackoverflow.com/questions/9995257/mshtml-createdocumentfromstring-instead-of-createdocumentfromurl
Dim objHtml As Object
Set objHtml = CreateObject("htmlfile")
' add html
With objHtml
.Open
.write strHtml
.Close
End With
' now parse the document
Dim objElements As Object, objElement As Object
' get the <a> tags
Set objElements = objHtml.getElementsByTagName("a")
' we want a tags without anchors and without img
For Each objElement In objElements
' innerText = "" is no anchor
If objElement.innerText = "" Then
' check for <img in innerHtml to avoid a tags with an image
If InStr(1, objElement.innerHtml, "<IMG", vbTextCompare) = 0 Then
Debug.Print objElement.outerHTML
End If
End If
Next objElement
End Sub
您可能正在使用 IE 自动化或其他工具从网页中抓取此 HTML。在这种情况下,使用早期绑定(bind)方法很有用,因为您将获得有关 HTMLDocument 对象和方法等的智能感知。
我很欣赏我的评论(关于使用正则表达式解析 HTML 的非常经典的回答)可能看起来很无礼。然而,它充满了困难,而且常常只是徒劳的练习。
如果您希望走这条路,希望这种方法能为您提供另一种选择。
关于html - 用于标记链接的空 anchor 的 RegEx 模式,其中 <img> 除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47108725/
我想替换每一个 带结束标记 字符串中的标记。该字符串实际上是一个 html 文档,其中 img 标记由我生成,并且始终如下所示: Src 是用户输入,所以它可以是任何东西。我做了一个正则表达式,不确
我使用数组通过 getElementsByClassName 存储我所有的 imgs。 我需要知道哪个 img 被点击或 mouseover/mouseout,所以我使用循环来检查哪个 img 被点击
我正在尝试使用图像制作一款类似 Match3 的游戏,但我无法进行比较。我正在为固定数量的 atm 执行此操作,只是为了让它正常工作,稍后应该在 foreach 循环中。如果有什么区别的话,该函数位于
我希望你能帮助我:) 我想定义 img 的高度,相对于图像的“实际”宽度。但宽度是动态的,因为它占父对象的百分比(wxample 的浏览器窗口)。 为什么我需要高度?:没有高度它工作正常,但我需要它,
我知道这个话题被讨论了很多,但我找不到任何适合我的解决方案。所以,我的代码大致是: var img =me.images[curID] var f = function() { var
我试图在一个页面上列出多个图像,但当您单击图像时,它会以模式打开。 它适用于第一张图片,但不适用于其他图片,我假设这是一个 JS 问题,我尝试设置一个空的 var,然后将其设置为获取元素 ID(每个
任务:我们正在通过 HttpWebRequest 抓取 HTML 内容(约 6,000 个调用)。该字符串经过修剪并存储在 SQL Server 2014 数据库中,以便作为 XML 进行处理。 问题
我从上面得到这个错误,不知道如何避免它。我的目的是获取屏幕截图,然后对其进行模板匹配,以查看此时屏幕上是否显示图标。到目前为止,它只是图标的位置。我的代码: #include "opencv2/hig
我有一个包含图像的容器,该图像是从应用程序加载的,因此容器的尺寸是已知的,而图像会有所不同。 我目前有以下 css: #secondary_photos { height: 100px; wi
我正在尝试设置一个随分辨率缩放但看起来仍然不错的页面背景..这就是我正在使用的.. 站点是http://www.gd-gaming.com/wordpress ,如果你用 Firebug 检查它,它只
目前我有 如何删除包装 img 标签的 p 标签? 所以我可以得到.. 最佳答案 使用 $('p > img').unwrap(''); 这将删除 img 周围的所有 p。您应该使用 cl
我想要动画 3 .svg图片: 和css : .sequence { position: relative; } .sequence img { position: ab
我有外部 RSS 提要填充以下重复出现的类 elements 。 {teaserImage} {teaserImage} {teaserImage} 我想简单地获取 :first 实例,该实例也是来自
这是一个独特的问题: 我不想使用浏览器 JavaScript 来解决这个问题,请继续阅读... 我要转换 通过编译应用程序( ng build 或 ng serve )到 Base64 img 标签,
悬停在 中的第一张图片上标记,我需要使用 CSS 增加第二张图片的不透明度。我试过使用 +和 ~运营商,无法让它发挥作用。任何帮助将不胜感激。 最佳答案 a:hover + img
我已经尝试解决这个问题有一段时间了,但我迷路了,有人吗? for(var i=0; i<10; i++) { var Img = new Image(); Img.onload = (
这就是我想要实现的目标: 当用户将鼠标悬停在较小的图像之一上时: 较小的图像 + 文本应替换较大的图像 + 文本。 当用户没有悬停时;将大集返回到其原始图像和文字。 这就是我到目前为止所拥有的。它没有
我知道如何在 php 中执行此操作,但我需要在 javascript/jquery 中完成此操作。 我正在尝试执行以下操作: $('#NewBox').html( $('#OldBox').html(
我正在使用一个 CMS (ExpressionEngine),它将段落标签包裹在图像周围。我正在使用响应式图像(最大宽度:100%),并且由于我还在段落上定义宽度,因此它会导致问题。我想使用 jQue
Tinymce 正在删除我的 img 结束标记并生成无效的 xhtml。 它变成了这个 进入这个 我也在使用 codemagic,但是在查看 html 时它仍然显示 .我也试过包括 , 但输出是
我是一名优秀的程序员,十分优秀!