javascript - iMacros:使用 Javascript 和 EVAL 来替换变量中的文本

标签 javascript regex replace escaping imacros

我在 Firefox 上使用 iMacros 自动下载我的 Wells Fargo PDF 银行对账单,并为文件指定链接名称,例如“Statement 04/22/12 (597K)

但是,我不能在文件名中包含斜杠(Windows 限制...)。因此,我尝试用破折号替换正斜杠

下面是我的 iMacro。我在以下行收到错误代码:

SET !VAR1 EVAL("var s=\"{{!EXTRACT}}\"; s.replace(/\//g, "-");") 

我的 javascript 或正则表达式不起作用,我不知道为什么。我对这两种语言都不擅长 - 我试图尽可能地复制其他示例,但没有成功。如果你能帮忙,那就太好了。谢谢。

VERSION BUILD=5010424 RECORDER=CR
' SET !ERRORIGNORE YES

TAB OPEN
TAB T=2
URL GOTO=https://online.wellsfargo.com/login
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:Signon ATTR=ID:username CONTENT=XXX
SET !ENCRYPTION TMPKEY
TAG POS=1 TYPE=INPUT:PASSWORD FORM=ID:Signon ATTR=ID:password CONTENT=XXX
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:Signon ATTR=NAME:continue&&VALUE:Sign<SP>On
TAG POS=1 TYPE=A ATTR=TXT:View<SP>online<SP>statements

SET !EXTRACT_TEST_POPUP NO

TAG POS=1 TYPE=A ATTR=TXT:Statement<SP>* EXTRACT=TXT
SET !VAR1 EVAL("var s=\"{{!EXTRACT}}\"; s.replace(/\//g, "-");")    <---- THIS IS THE PROBLEMATIC LINE!!!!!!!!!!!!!!
ONDOWNLOAD FOLDER=D:\Wells<SP>Fargo\CREDIT<SP>CARD\ FILE={{!VAR1}}.pdf
TAG POS=1 TYPE=A ATTR=TXT:Statement<SP>* CONTENT=EVENT:SAVETARGETAS

TAB CLOSE

另外,如果您知道如何使用 JavaScript 中的正则表达式删除“(597K)”,那就锦上添花了。 (显然,这个文本字符串的值对于每个不同的文件都会不同,因此它必须是动态的)

最佳答案

您错过了 "-" 中的引号转义,因此结束了 iMacros 字符串,而不是开始了 JavaScript 字符串。

您还可能在 /\// 中遇到问题。 regexp,因为我怀疑 iMacros 会吃掉 \/并将其变成/ ,给 JS 留下无效的文字 /// 。它必须是 /\\// .

此外,如果 !EXTRACT变量包含引号、反斜杠或换行符,它会将这些直接注入(inject)到 JavaScript 代码中,破坏 JS 字符串文字并可能执行任意脚本。

这些是嵌套转义上下文的许多问题的示例。您可以通过使用备用非冲突引号来避免前两个问题,并使用简单的字符串替换 split 来摆脱正则表达式文字。/join习语改为:

SET !VAR1 EVAL("'{{!EXTRACT}}'.split('/').join('-').split(' (')[0]") 

但这仍然留下了JS注入(inject)的问题。快速浏览一下手册,似乎 iMacros 没有任何可用的字符串处理功能,因此您无法执行手动 JS-string-literal-replace,或者实际上只是执行 / -至-从 iMacros 内进行替换。这样做是明智的。从字符串创建可执行代码几乎总是一个需要极力避免的灾难性错误。

[旁白:从手册来看,iMacros 的存在让我真的很不高兴。它为你提供了一种完全任意但无能为力的自制脚本语言,而不是仅仅使用已经可用的 JavaScript,然后让你无论如何都要使用 JS 来做任何超出可笑的微不足道的事情......并且不为你提供在两者之间安全传输值的工具。这个软件的意义何在?自从 4GL 的黑暗时代以来,我还没有因为试图解决错误的语言设计而感到如此沮丧。这太糟糕了。人们用这个吗?]

关于javascript - iMacros:使用 Javascript 和 EVAL 来替换变量中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10465153/

相关文章:

javascript - 如何使用javascript和ajax调用为文件上传添加进度条?

javascript - 如何判断字符串中是否包含任何非 ASCII 字符?

php - 更改函数以使用 preg_replace() 而不是 ereg_replace

MySQL 使用通配符替换查询无法运行

javascript - 在 php 中重新创建 js 正则表达式匹配函数

javascript - 如何在另一个面板打开时关闭 Accordion 面板?

javascript - 如何使用 chart.js 在饼图中的切片内显示切片值

javascript - 如何使用 jquery 或 php 根据先前选择的响应保持单选按钮的选择?

ruby - 在匹配特定条件时拆分字符串

python - 在 Pandas 中重命名列名