【问题标题】:VBScript RegEx - match between wordsVBScript RegEx - 单词之间的匹配
【发布时间】:2024-01-15 16:49:01
【问题描述】:

我很难想出一个在 VBScript 中使用的正则表达式。我正在尝试匹配 2 个关键字之间的所有文本:

(?<=key)(.*)(?=Id)

这会在 VBScript 中引发 RegEx 错误。身份证

我正在匹配的 Blob:

\"key\":[\"food\",\"real\",\"versus\",\"giant\",\"giant gummy\",\"diy candy\",\"candy\",\"gummy worm\",\"pizza\",\"fries\",\"spooky diy science\",\"spooky\",\"trapped\"],\"Id\"

理想情况下,我最终会得到一个这样的逗号分隔列表:

food,real,versus,giant,giant gummy,diy candy,candy,gummy worm,pizza,fries,spooky diy science,spooky,trapped

但是,我会接受在 VBScript 中工作的 2 个关键字之间的所有文本。

提前致谢!

【问题讨论】:

  • x=Replace(Blob, "\""") 然后使用Mid,然后使用Left 结束开始然后结束。或者继续使用替换。 y = Replace(x, "],Id") 然后z = Replace(y, "key:[")
  • 您正在处理 JSON。使用 JSON 解析器。 (这个 JSON 看起来像是被双重编码的,所以你需要解析两次。)

标签: regex vbscript


【解决方案1】:

VBScript 的正则表达式引擎不支持后向断言,因此您需要这样做:

s = "\""key\"":[\""food\"",\""real\"",\""trapped\""],\""Id\"""

'remove backslashes and double quotes from string
s1 = Replace(s, "\", "")
s1 = Replace(s1, Chr(34), "")

Set re = New RegExp
re.Pattern = "key:\[(.*?)\],Id"

For Each m In re.Execute(s1)
    list = m.Submatches(0)
Next

WScript.Echo list

【讨论】: