我有一个VBS正则表达式代码
Dim re, targetString, colMatch, objMatch
Set re = New RegExp
With re
.Pattern = "rain(.*)"
.Global = True
.IgnoreCase = True
End With
targetString = "The rain in Spain falls mainly in the plain"
Set colMatch = re.Execute(targetString)
For each objMatch in colMatch
wscript.echo objMatch.Value & "<br />"
Next
它返回“西班牙降雨主要在平原下降” 但我需要“在西班牙主要在平原下降”归还“ 通常应该返回括号中的内容,而不是括号后面的内容 哪种方法可以纠正?
答案 0 :(得分:4)
括号中的内容应该返回,而不是括号后面的内容
由于您正在使用捕获组,因此您需要通过.Submatches
访问这些捕获的文本:
执行正则表达式时,如果在捕获括号中包含子表达式,则可能会产生零个或多个子匹配。
SubMatches
集合中的每个项目都是正则表达式 找到并捕获 字符串。
您需要访问第一个Submatches
元素,并使用rain\s*(.*)
正则表达式。
这是脚本修复:
Dim re, targetString, colMatch, objMatch
Set re = New regexp
With re
.pattern = "rain\s*(.*)" ' <-- \s* will trim the start of the submatch
.Global = True
.IgnoreCase = True
End With
targetString = "The rain in Spain falls mainly in the plain"
Set colMatch = re.Execute(targetString)
For Each objMatch In colMatch
wscript.echo objMatch.SubMatches.Item(0) & "<br />" ' <--- We need to get the first submatch
Next
答案 1 :(得分:0)
stribizhev是对的,您需要按如下方式获取子匹配:
objMatch.Item(0).Submatches(0)