2012-10-15 7 views
2

VBScript에서 Regex를 사용하여 'candidate'클래스의 HTML 태그를 'PLACEHOLDER'텍스트로 바꾸려고합니다. 그러나, 그것은 항상 작동하지 않습니다. HTML을 VBScript Regex로 바꾸기

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

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

문제

내가이 클래스를 포함 할 HTML 태그의 유형을 잘 모르겠어요 것입니다 (예를 들어, 그것은 < div> 태그 또는 < p> 태그를 수 있습니다). 둘째 정규식은 내부 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> 

.

답변

3

이 정규 표현식입니까? 이 작업은 MSHTML (또는 다른 HTML 파서)을 사용하면 정말 쉽습니다. 이 예제에서는 "를 Test.htm"라는 파일에 피사체의 HTML을 넣어 : 접근 방식을 적응 암시 대신 사용하는

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 
+1

1 Regex_의 _Golden 해머 (2 INT, -2 WIS) – AutomatedChaos