2011-01-28 110 views
1

我正在嘗試在JavaScript中使用正則表達式。使用正則表達式在JavaScript中分割字符串

var script = "function onclick() {loadArea('areaog_og_group_og_consumedservice', '\x26roleOrd\x3d1');}"; 
var match = new RegExp("'[^']*(\\.[^']*)*'").exec(script); 

我想分裂包含兩個元素:在gskinner.com/RegExr/測試時,它

match[0] == "'areaog_og_group_og_consumedservice'"; 

match[1] == "'\x26roleOrd\x3d1'"; 

此正則表達式匹配正確的,但它並不在我的javascript工作。這個問題可以通過在這裏測試ir複製http://www.regextester.com/

我需要使用Internet Explorer 6及更高版本的解決方案。

任何正則表達式大師的幫助嗎?

+0

你能描述一下您所遇到的行爲?它完全匹配嗎?或只是匹配錯誤的部分? – kelloti 2011-01-29 02:25:26

+0

我得到第一場比賽,但第二場比賽看起來是空的。 – Simon 2011-01-29 13:15:09

回答

0

你正在尋找的正則表達式是.*?('[^']*')\s*,\s*('[^']*')。這裏的問題是,像往常一樣,match[0]是整個匹配的文本(這是非常正常的),所以它不是特別有用。 match[1]match[2]是您正在尋找的兩場比賽。

var script = "function onclick() {loadArea('areaog_og_group_og_consumedservice', '\x26roleOrd\x3d1');}"; 
var parameters = /.*?('[^']*')\s*,\s*('[^']*')/.exec(script); 
alert("you've done: loadArea("+parameters[1]+", "+parameters[2]+");"); 

我與此唯一的問題是,它有點不靈活。你可能想花一點時間來匹配2或3個參數的函數調用?

編輯 爲了響應您的請求,這裏是正則表達式匹配1,2,3,...,n參數。如果您注意到,我使用了非捕獲組((?:)部分)來查找多個逗號實例,然後是第二個參數。

/.*?('[^']*')(?:\s*,\s*('[^']*'))*/ 
+0

感謝您的回覆,並且無視第一場比賽。這次見面的問題要求,謝謝。我還應該指出,有時腳本中只有一個參數。你能夠馴服它,以便這樣做嗎? – Simon 2011-01-29 12:20:03

0

也許這:

'([^']*)'\s*,\s*'([^']*)' 
+0

感謝您的回覆,此作品謝謝。我還應該指出,有時腳本中只有一個參數 – Simon 2011-01-29 12:17:20

1

從你的正則表達式判斷,它看起來像你試圖匹配一個可能包含轉義引號的單引號字符串。該正則表達式的正確形式是:

'[^'\\]*(?:\\.[^'\\]*)*' 

(如果需要允許轉義引號,/'[^']*'/是所有你所需要的。)您也可以設置g標誌,如果你想獲得兩個字符串。下面是它的正則表達式字面形式的正則表達式:

/'[^'\\]*(?:\\.[^'\\]*)*'/g 

如果使用正則表達式的構造函數,而不是字面正則表達式,你必須要仔細逃避反斜槓:曾經爲字符串的正則表達式文字和一次。您還可以通過標誌(gim)作爲一個單獨的參數:

var rgx = new RegExp("'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'", "g"); 
while (result = rgx.exec(script)) 
    print(result[0]); 
相關問題