【问题标题】:Why am I getting an "Invalid regular expression flags" error?为什么我会收到“无效的正则表达式标志”错误?
【发布时间】:2018-03-08 01:03:24
【问题描述】:

我在这个网站上查看了“无效的正则表达式标志”是什么以及它出现在 JavaScript 中的原因,但这种特殊情况似乎与现有问题不匹配。

我正在为 Robot Framework 开发一个基于 JavaScript 的关键字(https://codereview.stackexchange.com/questions/175683/user-friendly-robot-framework-keywords-written-in-javascript,它不完全一样,但它使用调用 JavaScript 代码的相同方法)。这是我正在使用的代码。机器人框架关键字:

Click By Text
    [Arguments]     ${text}     ${iteration}=1
    ${tag} =    Execute Javascript  ${ABS_PATH}/${PROJECT}/External/ClickByText.js.ClickByText(${text}, ${iteration});
    Click Element   ${tag}

还有整个 JavaScript 文件。我承认自己是 JavaScript 的菜鸟,这就是为什么我相当肯定这个错误很简单。

function ClickByText(str, desired) {
    var all = document.getElementsByTagName("*");
    var instance = 0;
    var result;
    for (var i=0, max=all.length; i < max; i++) {
        var thisElement = all[i];
        if (thisElement.innerHTML === str) {
            instance++;
            if (instance === desired) {
                result = "document.getElementsByTagName(\"*\")[" + i + "]";
                break;
            }
        }
    }
    return result;
}

如果您恰好知道如何使该关键字起作用,那就太好了,但我正在专门寻找为什么会出现该错误。因为我正在使用 PyCharm 并像这样运行它,所以我什至不知道我在哪条线路上运行它。

编辑:修复了第 4 行的字符串创建。

编辑:错误的全文:

WebDriverException: Message: unknown error: Runtime.evaluate threw exception: SyntaxError: Invalid regular expression flags

编辑:代码的主要修订。

【问题讨论】:

  • 在您提供的代码中,thisElement 是一个字符串,因此没有innerHTML 属性。它也不会产生您描述的错误。您的实际代码与您问题中的代码之间一定存在不匹配。
  • 如果您实际上是在使用错误方向的斜杠“转义”引号,但 thisElement 实际上并不是一个字符串(也就是说,您正在执行类似 thisElement = document.getElementsByTagName(/"*/")[i] 的操作),那么可以完美地解释它,因为 /"*/ 是一个正则表达式(它匹配零个或多个引号字符),但最后的 " 不是有效的正则表达式标志(如 gi 使正则表达式全局或不区分大小写)。
  • 要添加一些与您的评论相关的内容,错误的全文现在已经存在,并且上面的代码与我实际使用的代码相同。如果是这种情况,我将如何使 thisElement 成为元素而不是字符串?
  • 另外,我改变了斜线的方向,结果没有改变。

标签: javascript robotframework


【解决方案1】:

在对我的代码进行大量的逐行测试后,我发现错误在修改后的代码的if (instance === desired) 中。就像我说的,这很简单。我的等号太多了,正确的代码是if (instance == desired)

根据我最初的问题中的 cmets 以及我在 Stack Overflow 上找到的其他内容,我相信“无效的正则表达式标志”是表达式(例如 ===)不正确的指标无论出于何种原因。根据我发现的情况,有时它可能比这更复杂,但显然这就是它的基础。

【讨论】:

  • 这并没有完全解决我的关键字问题,但确实解决了很多问题。感谢@apsillers 的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多