在iMacros中使用EVAL和REGEX来提取字符

时间:2014-03-23 14:56:23

标签: javascript regex eval imacros

让我说我有:

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)\"); ")

我得到了

  

制作,制作

有什么想法吗?

1 个答案:

答案 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

由于我在该论坛帖子之前遇到过这个问题,我想我会分享我在这里想到的,以防其他人遇到同样的情况。