]*candi-6ren">
gpt4 book ai didi

html - 用 VBScript 正则表达式替换 HTML

转载 作者:行者123 更新时间:2023-11-27 22:37:48 27 4
gpt4 key购买 nike

我试图在 VBScript 中使用 Regex 来替换具有文本“PLACEHOLDER”的类“candidate”的 HTML 标记。但是,它并不总是有效。

<[^\>]*class=""[^\>]*candidate[^\>]*""[^\>]*>([\s\S]*?)</[^\>]*>

Flags: IgnoreCase = True, Multiline = True, Global = True

问题是我不确定哪种类型的 HTML 标签将包含此类(例如,它可能是 < div > 标签或 < p > 标签)。其次,Regex 不能很好地处理内部 HTML 标签。

主题 HTML:

<div class="outer">
<div class="normal">
<p><strong><em>Test</em></strong></p>
</div>
<div class="candidate">
<p>Test 1:</p>
<ul>
<li>Test 2</li>
<li>Test 3 </li>
<li>Test 4 </li>
</ul>
<p>Test 5</p>
</div>
<p>Test 6</p>
<div class="normal">
<p><strong>Test 7</strong></p>
</div>
</div>

预期:

<div class="outer">
<div class="normal">
<p><strong><em>Test</em></strong></p>
</div>
<div class="candidate">
PLACEHOLDER
</div>
<p>Test 6</p>
<div class="normal">
<p><strong>Test 7</strong></p>
</div>
</div>

实际:

<div class="outer">
<div class="normal">
<p><strong><em>Test</em></strong></p>
</div>
<div class="candidate">
PLACEHOLDER
<li>Test 2</li>
<li>Test 3 </li>
<li>Test 4 </li>
</ul>
<p>Test 5</p>
</div>
<p>Test 6</p>
<div class="normal">
<p><strong>Test 7</strong></p>
</div>
</div>

相同的 HTML 标签也可能具有相同类型但不同类的内部标签,目前偶尔会起作用。

例如:

<div class="candidate">Test<div class="normal">Test</div></div>

任何帮助将不胜感激。

最佳答案

必须是正则表达式吗?使用 MSHTML 任务真的很容易(或任何其他 HTML 解析器)。在此示例中,我将您的主题 HTML 放在名为“test.htm”的文件中:

Option Explicit

Const ForReading = 1

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim inFile
Set inFile = fso.OpenTextFile("test.htm", ForReading)

Dim html
Set html = CreateObject("htmlfile")
html.write inFile.ReadAll()
inFile.Close

Dim allElements
Set allElements = html.getElementsByTagName("*")

Dim el
For Each el in allElements
If (HasClass(el, "candidate")) Then
el.innerText = "PLACEHOLDER"
End If
Next

WScript.Echo html.body.outerHtml

' Takes into account the fact that the HTML "class" attribute can
' contain multiple whitespace-delimited classes
Function HasClass(el, className)
Dim re
Set re = New RegExp

re.Pattern = "\b" & className & "\b"
HasClass = re.Test(el.className)
End Function

关于html - 用 VBScript 正则表达式替换 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12888588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com