我相當確信在花了一夜試圖找到答案,這是不可能的,我已經開發了一個工作 - 但是,如果有人知道更好的方法,我很樂意聽到它...JavaScript正則表達式返回引用返回來自單個捕獲組(多個組)的匹配數組
我已經經歷了很多關於代碼的迭代,以下只是真正的思路。我相信,在某些時候,我使用全局標誌來匹配match(),我不記得現在是否有必要。
var str = "@[email protected]@ghi&jkl";
var regex = /^(?:@([a-z]+))?(?:&([a-z]+))?$/;
這裏的想法,在此簡化的代碼,是可選的組1,其中有一個未指定的量,將匹配@abc,@def和@ghi。它只會捕獲將會有一個或多個字母的字母字符。組2是相同的,除了符號&符合。它也應該錨定到字符串的開始和結尾。
我希望能夠備份參考這兩個組的所有比賽,即:
result = str.match(regex);
alert(result[1]); //abc,def,ghi
alert(result[1][0]); //abc
alert(result[1][1]); //def
alert(result[1][2]); //ghi
alert(result[2]); //jkl
我的隊友說,這個工作正常,他在.NET中,不幸的是我根本無法得到它的工作 - 只有最後任何組的匹配被返回在後面參考,如可以在可看出以下幾點:
(另外,使任一組可選的使一團糟一樣,設置全局標誌)
var str = "@[email protected]@ghi&jkl";
var regex = /(?:@([a-z]+))(?:&([a-z]+))/;
var result = str.match(regex);
alert(result[1]); //ghi
alert(result[1][0]); //g
alert(result[2]); //jkl
以下是我到達,捕捉問題的整個部分,並創建陣列自己的解決方案:
var str = "@[email protected]@ghi&jkl";
var regex = /^([@a-z]+)?(?:&([a-z]+))?$/;
var result = regex.exec(str);
alert(result[1]); //@[email protected]@ghi
alert(result[2]); //jkl
var result1 = result[1].toString();
result[1] = result1.split('@')
alert(result[1][1]); //abc
alert(result[1][2]); //def
alert(result[1][3]); //ghi
alert(result[2]); //jkl
感謝您的回覆。我認爲可能有更優雅的解決方案。 http://stackoverflow.com/a/1412662/1455709是我能找到的最接近的答案,但是當表達式變得複雜並且鞋子變成我之後的東西時,它沒有成功... – Patrick 2012-08-09 16:15:13
不客氣。祝你好運! – Pointy 2012-08-09 16:16:49