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。 –

相關問題