2017-09-26 24 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を使用したノブであることを認めています。そのため、このエラーは単純です。

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を使用しており、このように実行しているので、私はそれをどのような行にしているのかも知らない。

編集:エラーの全文:

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

EDIT:コードの主な改正の行に4

EDITを文字列の作成を修正しました。

+1

あなたが提供したコードでは、 'thisElement'は文字列なので、' innerHTML'プロパティはありません。あなたが説明したエラーも発生しません。あなたの実際のコードとあなたの質問のコードとの間に不一致がなければなりません。 – apsillers

+0

'thisElement = document.getElementsByTagName(/" */")のように、間違った方向のスラッシュで引用符を実際にエスケープしていますが、' thisElement'は実際には文字列ではない場合(つまり、 '/" */'は正規表現(0個以上の引用符にマッチする)であるが、最後の' "は有効なregexpフラグではない(' g 'のように) regexpを大文字または大文字と小文字を区別させないようにするには 'i'を使います)。 – apsillers

+0

あなたのコメントに関連するものをいくつか追加するには、エラーの全文がそこにあります。上のコードは、実際に使用しているコードと同じです。その場合、 'thisElement'を文字列ではなく要素にする方法はありますか? –

答えて

0

改訂コードのif (instance === desired)にエラーがあることがわかりました。私が言ったように、それは単純なものです。私には等号が多すぎ、正しいコードはif (instance == desired)です。

私の元々の質問や、スタックオーバーフローで見つかったその他の点についてのコメントに基づいて、「無効な正規表現フラグ」は式(たとえば===)が間違っていることを示すものですどんな理由であれ。見つけたものに基づいて、時にはそれよりも複雑になることがありますが、明らかにそのことがその基本です。

+0

これはキーワード全体の問題を解決していませんでしたが、それでも問題は解決しました。助けてくれてありがとう、@apsillers。 –

関連する問題