0

ページからコンテンツを抽出するために使用しているJS/jQueryの非常に単純なスニペットがあります。

(function (idx) { 
  var product = $(".product_wrapper img")[idx]; 
  return (product && product.src) ? product.src.match(/([^]+)\\_/)[1] : "" 
}(0)).split('_')[1]

ほとんどのブラウザで問題なく動作しますが、IE7とIE8はエラーをスローしています。IE7ではエラーメッセージが表示[object Error]され、IE8ではエラーメッセージが表示されますSyntaxError: Expected '/'

誰かがこのコードの何が問題になっているのか知っていますか?MSIEが気に入らないシンタックスシュガーを使用していますか?これに戸惑い、困惑しました。

4

3 に答える 3

1

product.src.match(/([^]+)\\_/)nullの場合

product.src.match(/([^]+)\\_/)[1]オブジェクトエラーが発生します

于 2012-12-12T04:04:40.500 に答える
0

最初のステップは、「より優れた」ブラウザであるIE8がエラーを出す理由を理解することです。表示されるエラーは、「/」文字(スラッシュ)である正規表現初期化子ターミネーターが欠落していることを示しているようです。正規表現の構文はIE9で機能します。

"foo".match(/([^]+)\\_/); 

そして、私はそれがIE8でも動作することをかなり確信しています。上記がIE8で機能するかどうかを確認してから、エラーが表示されたときに実際に実行されているコードが実際に実行されているものであることを確認することをお勧めします。これを確認するには、IE 8のブラウザーキャッシュを手動でクリアしてから、コード/Webページを再読み込みします。

于 2012-12-12T05:55:53.230 に答える
0

(少なくともIE8で)壊れた最も簡単な例はこれです:

"foo".match(/[^]/);

問題は^、括弧内は「否定」を意味するため、何かが否定することを期待していることです。IEはこれが原因で壊れ、カラットをエスケープすることで解決できます(それがあなたが探しているものである場合):

"foo".match(/[\^]/);

Firefoxは、壊れないように解釈[^]しているようです。.コードサンプルから、URLから何を抽出しようとしているのかが明確ではありません。コードでカラットを探している場合は、元の投稿にあったものをエスケープしてください。Firefoxで動作するため、文字を探しているだけの場合は、.代わりに使用してください。

于 2012-12-13T20:28:02.963 に答える