2013-02-04 88 views
0

修訂正則表達式模式不起作用隨着Ajax響應

我需要一些幫助你打敗正則表達式! 我得到外部CSS文件中這樣AJAX響應的形式:

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

我試圖實現在這裏我想一切從#mydiv到最後一個右括號},但由於某種原因提醒(匹配)返回我null

最討厭的事情是,當我改變模式:

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

警報(比賽)返回我什麼是應該返回 - >#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); 
} 

工件W.如我預期的那樣。任何想法我在這裏想念什麼?

+0

盡頭,如果你在jsfiddle.net張貼的樣本您將得到更好的結果,併爲未來的觀衆更好地瞭解 – enginefree

+1

你的第一個例子正確給我'#mydiv .mylink {背景: 綠色; }',即預期的結果。您的代碼中的其他地方必須有錯誤。 –

+3

請不要以「我很小白」開始提問。我們是程序員,而不是CSI的1337 h4x0rs。 –

回答

1

}是正則表達式上的保留字符,您必須用\將其轉義。我認爲你正在使用的正則表達式是"#mydiv(.*)\}""#mydiv(.*)\\}",如果\本身必須被轉義。

+0

我嚴格更新了我的問題。你能再請看看嗎? – LoomyBear

+0

只有在每條規則位於不同的行上時纔有效,而第一個變體必須是'/#mydiv(。*)\} /'。 – PointedEars

0

好吧我想我找到了解決方案。

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

瘋狂谷歌搜索,stackoverflowing和與社區整夜討論後。我發現問題在於JS Regex不會將.識別爲新行,因此您需要將(\n|.)代替。

我不確定這個解決方案是否具有通用性,並且可以在不同的CSS文件上進行測試。謝謝你們評論我的帖子!我非常感謝你的合作!

來源:http://goo.gl/1W55l