2013-07-08 69 views
0

我需要匹配所有條目,例如{*}的字符串(使用Javascript)。我該怎麼做?匹配所有條目{*}

下面是一個輸入:"#SD#{date};{time};{lat1};{lat2};{lon1};{lon2};{speed};{course};{height};{sats}\r\n";

在此先感謝

回答

3

使用正則表達式可能:

var r = /{.*?}/g; 
var s = "#SD#{date};{time};{lat1};{lat2};{lon1};{lon2};{speed};{course};{height};{sats}\r\n"; 
var matches = s.match(r); 

或者,如果你想要去除那些{}的結果,你可以運行。 exec()循環來獲取捕獲的數據:

var r = /{(.*?)}/g; 
var s = "#SD#{date};{time};{lat1};{lat2};{lon1};{lon2};{speed};{course};{height};{sats}\r\n"; 
var matches = []; 
var match = null; 

while(match = r.exec(s)) { 
    matches.push(match[1]); 
} 
2

你可以嘗試使用th e以下正則表達式:

var str = "#SD#{date};{time};{lat1};{lat2};{lon1};{lon2};{speed};{course};{height};{sats}\r\n". 
var m = str.match(/{.*?}/g); 

您會在m中找到所有匹配項。

更多參考:http://www.w3schools.com/jsref/jsref_match.asp

+1

您正在使用貪婪的正則表達式。它將從一個組中的第一個「{」到最後一個「}」捕獲*一切*。 –

+0

http://www.w3fools.com/ –

+0

你是對的,我編輯了一點點正則表達式 –

2

對於剛剛括號內的文字,你應該能夠使用這個模式:

var pattern = new RegExp("([^{|^}]+)(?=})", "g"); 
var testString = "#SD#{date};{time};{lat1};{lat2};{lon1};{lon2};{speed};{course};{height};{sats}\r\n"; 
var bracketTextArray = testString.match(pattern); 

bracketTextArray變量將是一個包含下列值的數組:

"date", "time", "lat1", "lat2", "lon1", "lon2", "speed", "course", "height", "sats" 

正則表達式匹配除{以外的任何一個或多個字符的每個出現次數和}(這是這部分:([^{|^}]+)),緊接着是}字符(這是這個部分:(?=}))。 RegExp定義中的"g"使模式變得「貪婪」,以便它能夠找到所有的事件。