2011-07-17 5 views
2

昨日スクリプトを停止するようだ「Hnattは」親切に、このスクリプトの正規表現の部分を提供することでした。 「example.com」をではなく)に変更すると、スクリプト全体が停止します。私は、スクリプトが前方に進むことを可能にするtry/catch以外の解決策を知りたい。 (私はtry/catchで修正をハックしましたが、try catchを挿入すると大きなスクリプトを壊します...なぜか分からないので、try/catchで構成されていないソリューションが必要です)。また、「マッチ」機能がマッチを見つけられなかったときに、この一時停止がなぜ発生するのかを理解しようと思います。JavaScriptのmatch関数は

<html> 
<body> 
    <script type="text/javascript"> 
     alert("hhhhhh yadad exampleTwo.com/check?x=asdfasdf bsss ffhhh".match(/example.com\/check\?x\=([^\s]*)/)[1]); 
     alert('alert 2'); 
    </script> 
</body> 
</html> 

これは煮付けたバージョンです。より広範なスクリプトでは、私は干し草の中にある針を使って変数に割り当てます。

+0

コンソール:* Uncaught TypeError:nullのプロパティ '1'を読み取れません*文字列が一致するかどうかを知りたい場合は、 'expressions.text(string)'を使用してください。 –

答えて

1

:あなたは、このためのようなものをチェックする必要があります一致が見つかった場合、それを使用する前に十分な一致が見つかった場合。

var matches = "hhhhhh yadad exampleTwo.com/check?x=asdfasdf bsss ffhhh".match(/example.com\/check\?x\=([^\s]*)/); 
if (matches && matches.length > 1) { 
    alert(matches[1]); 
} 
+0

条件を簡単に変更できますif(matches [1]) – RReverser

+1

エラーが発生することなく、一致がnullの場合にif(matches [1])を実行することはできません。 http://jsfiddle.net/jfriend00/fz5nm/を参照してください。 – jfriend00

+0

本当に、忘れました。あなたが正しいです、チェーンチェックだけあなたのように使用されるかもしれません、または "マッチ&&マッチ[1]"。 – RReverser

7

一致がない場合、.match()メソッドはnullを返します。インデックス[1]nullにしようとすると、エラーが発生し、スクリプトが停止します。あなたがキャッチ/試みる使用スクリプトエラーを生成しないしないようにしたい場合は、あなたが変数にマッチ戻り値を代入してかどうかを確認するために、それをテストする必要があり、

var match = "hhhhhh yadad exampleTwo.com/check?x=asdfasdf bsss ffhhh".match(/example.com\/check\?x\=([^\s]*)/); 
if (match) { 
    alert(match[1]); 
} 
alert('alert 2'); 
+0

結果を変数に保存して、その変数がnullでないかどうかをチェックしてください – yoavmatchulsky

+0

FYI、一致が1つしかない場合、これは必ずしも機能しません。あなたはマッチ[1]を参照する前に少なくとも2つのマッチがあることを確認する必要があります。 – jfriend00

+0

もちろん、このパターンの場合、 'matches 'があれば' matches [1] 'があります。 –

0

Jeremyはエラーが発生する理由を説明しています。

alert(("hhhhhh yadad exampleTwo.com/check?x=asdfasdf bsss ffhhh".match(/example.com\/check\?x\=([^\s]*)/) || [])[1]); 

これにより、一致が失敗した場合に一致結果が空の配列に変わります。