如何正确匹配?

时间:2015-09-29 15:21:56

标签: regex vbscript

我有一个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

它返回“西班牙降雨主要在平原下降” 但我需要“在西班牙主要在平原下降”归还“ 通常应该返回括号中的内容,而不是括号后面的内容 哪种方法可以纠正?

2 个答案:

答案 0 :(得分:4)

  

括号中的内容应该返回,而不是括号后面的内容

由于您正在使用捕获组,因此您需要通过.Submatches访问这些捕获的文本:

  

执行正则表达式时,如果在捕获括号中包含子表达式,则可能会产生零个或多个子匹配。 SubMatches集合中的每个项目都是正则表达式 找到并捕获 字符串。

您需要访问第一个Submatches元素,并使用rain\s*(.*)正则表达式。

请参阅the regex demo here

这是脚本修复:

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)