0

IEを正規表現でうまく再生するのに問題があります。背景画像を取得して、サイトの他の場所で使用しようとしています。IEを除くすべてのブラウザで動作します(もちろん)。

コードは次のとおりです。

var bgImg = body.css('background-image').replace(/^url\(['"]*(.+)['"]*\).*/, '$1');

それは実際に機能するはずですが、何らかの理由でIEは最後の引用をキャッチしておらず、これを返しています。

http://mydomain.com/images/bg-image.jpg "

それがなければ、replaceこれを返します:

url( "http://mydomain.com/images/bg-image.jpg")

その最後の二重引用符の世話をすることによって私の正規表現をすべきではありませんか?IEをうまく再生するにはどうすればよいですか?

4

6 に答える 6

0

IEは正しいです。任意の数の任意の文字に一致するように指示し、その後に0個以上の引用符が続き、その後に角かっこが続きます。数量詞はデフォルトで貪欲であるため、IEは「任意の文字」の一部として最後の引用符と一致します。

この正規表現を試してください:

/^url\(['"]?([^'"]+)['"]?\)$/

次回は、IEを破棄する前に、コードが正しいことを確認してください。

于 2012-04-06T21:15:14.197 に答える
0

他のブラウザがこの正しい動作を示していないことを信じるのは難しいと思います。貪欲な数量詞を使用し、終了引用符をオプションにしたため、最初のキャプチャグループには常に引用符が含まれている必要があります。

別の正規表現を提案します:

var bgImg = body.css('background-image').replace(/^url\((['"]?)(.+?)\1\).*/, '$2');
于 2012-04-06T21:16:16.770 に答える
0

あなたの正規表現はFirefoxでも機能しません。

これは、.+貪欲であり、可能な限り多くの文字列を消費するためです。

.+?代わりに使用してみてください。

于 2012-04-06T21:16:25.160 に答える
0

この正規表現はIEで機能するようです。これは別のアプローチです。

/^url\(['"]*([^'")]+)['"]*\).*/

もう一方が機能しなかった理由は正確にはわかりませんが、*の貪欲さに関係している可能性があります。

IE9で失敗し、この正規表現はここで機能します:http: //jsfiddle.net/jfriend00/yyqB6/

于 2012-04-06T21:20:27.217 に答える
0

タイプがIEの場合はブラウザのタイプを確認し、置換用の正規表現をもう1つ追加して、引用符(s / \ "// g)内のテキストを選択し、最後に必要な処理を実行します。

于 2012-04-06T21:30:09.063 に答える
-1

たぶん、正規表現を使用せず、substrを使用するだけです:

var bgImg = body.css('background-image');

bgImg = bgImg.substr(5, bob.length - 7);
于 2012-04-06T21:11:41.267 に答える