2017-09-26 56 views
0

我在本网站上看过“无效的正则表达式标志”是什么以及它为什么出现在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的noob,所以我相当肯定这个错误很简单。

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 

编辑:代码的重大修改。

+1

在你提供的代码中,'thisElement'是一个字符串,因此没有'innerHTML'属性。它也不会产生您所描述的错误。您的实际代码和您的问题中的代码之间必定存在不匹配。 – apsillers

+0

如果实际上使用错误的方向斜杠“转义”引号,但“thisElement”实际上不是字符串(即,您正在执行类似于'thisElement = document.getElementsByTagName(/“* /”)的操作因为'/“* /'是一个正则表达式(它匹配零个或多个引号字符),但最终的'''不是一个有效的正则表达式标志(如'g''')或'我'来使正则表达式全局或不区分大小写)。 – apsillers

+0

要添加一些与您的评论相关的内容,现在错误的完整文本已经存在,并且其中的代码与我实际使用的代码相同。如果是这样的话,我会如何让'thisElement'成为一个元素而不是一个字符串? –

回答

0

经过对我的代码进行全面测试后,我发现错误代码是if (instance === desired)。就像我说的,这很简单。我有一个太多的等号,并且正确的代码是if (instance == desired)

根据我在Stack Overflow上找到的原始问题和其他内容的评论,我导致认为“无效的正则表达式标志”是一个表达式(例如===)对于无论原因。根据我发现的情况,有时可能会比这更复杂,但显然这是它的基础。

+0

这并没有解决我整个关键字的问题,但它确实解决了一大堆问题。感谢您的帮助,@apsillers。 –

相关问题