让我说我有:
SET !EXTRACT "this is a Make of the car"
如果我使用:
SET !VAR1 EVAL("var s=\"{{!EXTRACT}}\"; s.match(\"Make\"); ")
然后我得到一个提示“Make”。现在,让我们说我对“制造的”一词感兴趣。根据在线测试员(http://www.regexr.com/),正则表达式将是:
(?<=this is)(.*)(?=car)
但是,以下代码不起作用:
SET !VAR1 EVAL("var s=\"{{!EXTRACT}}\"; s.match(\"(?<=this is)(.*)(?=car)\"); ")
我收到以下错误:
SyntaxError:无效量词,第16行(错误代码:-1001)
为什么?
编辑:显然,使用其他在线测试人员(http://www.pagecolumn.com/tool/regtest.htm),正则表达式应该是:
(?![this is])(.*)(?=car)
然而,使用此:
SET !VAR2 EVAL("var s=\"{{!EXTRACT}}\"; s.match(\"(?![this is])(.*)(?=car)\"); ")
我得到了
制作,制作
有什么想法吗?
答案 0 :(得分:1)
我最近遇到了同样的问题,并在试图弄清楚发生了什么时遇到了这个问题。花了我一些时间来弄清楚发生了什么。如果我没有使用正确的术语,请原谅我。
让我用你最后一个例子来解释发生了什么。
SET !VAR2 EVAL("var s=\"{{!EXTRACT}}\"; s.match(\"(?![this is])(.*)(?=car)\"); ")
您获得输出的原因是:
a Make of the ,a Make of the
是因为正则表达式中的括号是将匹配数据存储在“s”变量中的单独数组中,这是逗号后面的内容。通过指定包含您想要输出的数据的数组,您可以获得您正在寻找的输出。
例如,如果你想:
a Make of the
作为所需的输出,请使用
SET !VAR2 EVAL("var s=\"{{!EXTRACT}}\"; s.match(\"(?![this is])(.*)(?=car)\"); s[0];")
观察此行末尾的“s [0]”。 [0]数组转换为“匹配的所有内容”,其中[1]是“(第一个)括号中匹配的所有内容”。不要问我为什么会这样。我遇到了以下论坛帖子,它指出了我正确的方向。
http://forum.imacros.net/viewtopic.php?f=7&t=18938
由于我在该论坛帖子之前遇到过这个问题,我想我会分享我在这里想到的,以防其他人遇到同样的情况。