javascript - iMacros FF Eval If Else .match .replace 正则表达式捕获组被忽略

标签 javascript regex conditional-statements eval imacros

SET !VAR1 EVAL("var s=\"{{!EXTRACT}}\";
if(!s.match(/.*>\s*(\d+).*/)) {s.replace=(/.*>\s*(\d+).*/,'$1');}
else {s.replace=/.*>\s*(\D+).*/,'$1';}")
PROMPT {{!VAR1}} 

我正在尝试检查提取的 HTML 代码(匹配第一个或第二个片段)是否与 html 标记之外的数字字符“11111”字符串匹配,如果匹配,请将其替换为所述匹配的第一个捕获组('$1'):

<td style="outline: 1px solid blue;">
              11111      <img src="/images/flaggen/de.png" name="" alt="" width="16" height="11" align="absmiddle">       SomeText                  (MoreText)                </td>

如果不匹配,请再次使用第一个捕获组('$1')将其替换为非数字字符串“SomeText”:

<td style="outline: 1px solid blue;">
                        <img src="/images/flaggen/de.png" name="" alt="" width="16" height="11" align="absmiddle">       SomeText                  (MoreText)                </td>

正则表达式在两种情况下都匹配,并且确实替换了字符串,但仅返回字面意义

$1

,或者我尝试替换的任何内容。

我尝试过的其他正则表达式都不起作用(仅返回文字正则表达式),$& 也不起作用。

如何在此表达式中成功引用捕获组?

编辑1:使用不带引号的$1返回字面$1,使用双引号“$1”返回iMacro错误MacroSyntaxError:SET命令格式错误,第42行(错误代码:-910) 。转义双引号 \"$1\" 再次按字面返回 $1

最佳答案

如果我理解正确,请尝试以下 EVAL 命令:

SET !VAR1 EVAL("var s='{{!EXTRACT}}'; if(s.match(/.*>\s*(\d+).*/)) {s = s.match(/.*>\s*(\d+).*/)[1];} else {s = s.match(/.*>\s*(\D+)\\(/)[1].trim();} s;")

关于javascript - iMacros FF Eval If Else .match .replace 正则表达式捕获组被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45955696/

相关文章:

javascript - MomentJS 如何使用 > 和 <(和 >=、<=)比较值?

python - 如何修改此正则表达式以不匹配不间断空格?

c - 在 Perl 中实现类似 sscanf 的功能的最佳方法是什么?

javascript替换点(不是句点)字符

linux - 根据 SSID 停止 ssh 和 smbd 的 Bash 脚本

ruby-on-rails - 在 Rails 中,如果记录不存在,更新记录或创建新记录的最佳方法是什么?

javascript - 如何在文件查找函数 (Node.js) 中返回结果?

javascript - 从mysql加载数据到leaflet

java - 从浮点读取字节(Javascript)

mysql删除重复行+排序条件