0

更新しました

正規表現を打ち負かすためにあなたの助けが必要です! 次のような AJAX 応答の形式で外部 CSS ファイルを取得しています。

$.when($.get("style.css")).done(function(response) {
    var myCSS = response;
    var patt = new RegExp("#mydiv(.*?)}","g");
    var match = myCSS.match(patt);
    alert(match);  
}

ここで達成しようとしているのは、 #mydivから最後の閉じ括弧}までのすべてを取得したいということですが、何らかの理由でalert(match)がnullを返します。

最も面倒なのは、パターンを次のように変更するときです。

var patt = new RegExp("#mydiv(.*?){","g"); // <-- Changed } to {

alert(match)は返されるはずのものを返します --> #mydiv .mylink {

または、同じ CSS を次のような単純な文字列の形式で表す場合:

$.when($.get("style.css")).done(function(response) {
    var myCSS = "The same style.css but copy-pasted here";
    var patt = new RegExp("#mydiv(.*?)}","g");
    var match = myCSS.match(patt);
    alert(match);  
}

期待どおりに私の初期パターンで動作します。ここで何が欠けているのでしょうか?

4

2 に答える 2

1

}正規表現の予約文字です。 でエスケープする必要があります\。あなたが求めている正規表現は、それ自体をエスケープする必要がある"#mydiv(.*)\}""#mydiv(.*)\\}"どうかだと思います。\

于 2013-02-04T01:03:51.600 に答える
0

わかりました、解決策を見つけたと思います。

var patt = new RegExp("#" + myID + "(\n|.)*?}","g");

クレイジーなグーグル、スタックオーバーフロー、そしてコミュニティと一晩中話し合った後。問題は、JS Regex が を.新しい行として認識しないため、代わりに配置する必要があることがわかりました(\n|.)

このソリューションが普遍的であるかどうかはわかりません。異なる CSS ファイルでテストする必要があります。私の投稿にコメントしてくれてありがとう!ご協力ありがとうございました!

出典: http://goo.gl/1W55lの一番最後

于 2013-02-04T12:16:07.503 に答える