我正在尝试使用Regex返回vbscript中的匹配单词。我的hta文件位于gist
我的vbs Sub是: -
Sub ProcessFile(FileName)
On Error Resume Next
Set fso = CreateObject("Scripting.FileSystemObject")
Set fileObj = fso.GetFile(FileName)
Set contents = fileObj.OpenAsTextStream(1, 0)
'MsgBox contents.ReadAll
If err.number = 0 then
Set r = New RegExp
r.Global = True
r.Pattern = "\[CATS\]\.(\[[^]]+\])"
Set ms = r.Execute(contents)
For Each m In ms
MsgBox m.SubMatches(0)
demo.innerHTML = demo.innerHTML & m.SubMatches(0)
Next
Else
MsgBox err.number
End If
End Sub
它不会返回匹配的单词 有一些想念
对于包含以下文本的文本文件: -
[CATS].[Hello_World1] Lorem Ipsum [CATS].[Hi_Venus1] Demo Text [CATS].[Yo_Moon1] Lorm Ipsum
[CATS].[Hello_World] Lorem Ipsum [CATS].[Hi_Venus] Demo Text [CATS].[Yo_Moon] Lorm Ipsum
预计会返回[Hello_World1], [Hi_Venus1], [Yo_Moon1], [Hello_World], [Hi_Venus], [Yo_Moon]
答案 0 :(得分:3)
您使用活动的OERN运行代码。这隐藏了错误。例如:contents
是一个流(因此contents.ReadAll()
'工作')。但是r.Execute(contents)
不可能“正常”,因为.Execute
期望/需要一个字符串。
更新评论:
如果您知道MsgBox contents.ReadAll
显示了流的字符串内容,则Set ms = r.Execute(contents.ReadAll())
不应该太难。
请记住:Set
用于将对象(流,匹配集合,...)分配给变量;所以Set str = contents.ReadAll
不可能“有效”(如果你禁用/删除了OERN,你会被告知)。
答案 1 :(得分:3)
你也可以使用Do ... Loop语句逐行处理它。
Sub ProcessFile(FileName)
Set fso = CreateObject("Scripting.FileSystemObject")
Set fileObj = fso.GetFile(FileName)
Set contents = fileObj.OpenAsTextStream(1, 0)
If err.number = 0 then
Linenum = 0
Do Until contents.AtEndOfStream
line = contents.readline
Linenum = Linenum + 1
Set r = New RegExp
r.Pattern = "\[CATS\]\.(\[[^]]+\])"
Set ms = r.Execute(line)
For Each m In ms
MsgBox m.SubMatches(0)
demo.innerHTML = demo.innerHTML & m.SubMatches(0)
Next
Loop
Else
err.clear
End If
End Sub