2016-09-01 50 views
0

基本上我一直沒有創建一個數組我想要的方式,你認爲是最好的方法來創建一個數組輸出所有正則表達式找到匹配?你能告訴我一個例子嗎?Javascript nodejs&數組

下面是輸出的一個例子:其由可變稱爲MSG

ID名稱平管理單元UPDT POSI DIST傳遞

765611981281 #### nameexampple1 600 0 0

765611981281 #### nameexampple2 31 0 0

765611981281 #### nameexampple3 41 0 0

基本上我想匹配並輸出捕獲到數組,所以只有ID /名稱/ Ping線索引每個自己內部的數組索引,我可以稍後與像arraylist [2] .highping [2 ]並且會輸出(nameexample2,因爲它的arraylist第二行)作爲highping正則表達式組2是該捕獲的用戶名。

//RegExp 
var pingchecker = new RegExp(/^([0-9]{0,17}).+?(\w+).+?([0-9].+).+?([0-9]).+?([0-9])/m); //set to multi line 

//Finds RegExp of id name ping etc from msg which is the live feed to rcon 
if (/^id.+?name.+?ping.+?snap.+?updt.+?posi.+?dist/.test(msg)) { 
    console.log('PING CHECKER - Passing to Conditional'); 

//Finds RegExp of pingchecker from msg which is the live feed to rcon 
    if((highping = pingchecker.exec(msg))) { 
    console.log('SteamID: ' + highping[1] + ' PlayerName: ' + highping[2] + ' Ping: ' + highping[3]) //outputs one player as normal. 
    } 

} 

這對任何人都有意義嗎?我是否在談論這個錯誤?基本上我需要指針,上面的代碼只是第一個找到的匹配的輸出,例如。

+2

我想你可以通過手動構建預期的數組輸出來改善你的問題。以純文本形式描述可能會令人困惑。 –

+1

是的,預期輸出的一個例子有很長的路要幫助 –

+0

感謝您的意見,但似乎有人已經爲我解決了我的問題。感謝您的回覆,我在下次發佈時會考慮到這一點。 – DougvF

回答

0

認爲您正在尋找類似於下面的代碼。它會將每個匹配數組放入一個匹配數組中,以便您可以「稍後可以使用正則表達式組調用」。

變化:

  1. 更改pingchecker正則表達式來match globally using /g。這允許它在字符串中多次匹配。
  2. if更改爲while so it loops through finding all matches而不是第一個。
  3. 添加變量resultArray以按照問題中的要求保存結果「輸出捕獲到數組」,以便您可以「稍後可以使用正則表達式組」調用。
  4. console.log()移動到單獨的resultsArray.forEach()循環中,以演示resultsArray已填充。

var msg= `id name ping snap updt posi dist 
 

 
765611981281#### nameexampple1 600 0 0 
 

 
765611981281#### nameexampple2 31 0 0 
 

 
765611981281#### nameexampple3 41 0 0`; 
 
    
 
//RegExp (multi line and global) 
 
var pingchecker = new RegExp(/^([0-9]{0,17}).+?(\w+).+?([0-9].+).+?([0-9]).+?([0-9])/mg); 
 
var resultArray =[]; 
 

 
//Finds RegExp of id name ping etc from msg which is the live feed to rcon 
 
if (/^id.+?name.+?ping.+?snap.+?updt.+?posi.+?dist/.test(msg)) { 
 
    console.log('PING CHECKER - Passing to Conditional'); 
 

 
    //Finds RegExp of pingchecker from msg which is the live feed to rcon 
 
    //Loop through all matches, adding them to the OP requested resultsArray 
 
    while(highping = pingchecker.exec(msg)) { 
 
     resultArray.push(highping); 
 
    } 
 
} 
 

 
//Loop through resultsArray and output the matches 
 
resultArray.forEach(function(result){ 
 
    //output player 
 
    console.log('SteamID: ' + result[1] + ' PlayerName: ' + result[2] 
 
       + ' Ping: ' + result[3]); 
 
});

+1

解釋你改變了什麼,爲什麼。 – Barmar

+0

@Makyen從第一個正則表達式中刪除開始斷言字符並不是一個好主意,因爲它可能會匹配錯誤的消息。並且更好地使用'msg'的模板文字。 –

+0

@ SoftwareEngineer171,你是對的。這是從自我創造'味精'變量的第一遍。當我回去並在這個變量中加入換行符時,我沒有改變它。我同意在換行之後匹配是可取的。 – Makyen

0

需要,直到你到達最後一名選手重複執行正則表達式。將if替換爲while(否則,您將只獲得第一個玩家)。另外,您需要在您的pingchecker上添加全局正則表達式修飾符。

var msg = `id name ping snap updt posi dist 

765611981281#### nameexampple1 600 0 0 

765611981281#### nameexampple2 31 0 0 

765611981281#### nameexampple3 41 0 0`; 

//RegExp 
var pingchecker = new RegExp(/^([0-9]{0,17}).+?(\w+).+?([0-9].+).+?([0-9]).+?([0-9])/mg); //set to multi line 

//Finds RegExp of id name ping etc from msg which is the live feed to rcon 
if (/^id.+?name.+?ping.+?snap.+?updt.+?posi.+?dist/.test(msg)) { 
    console.log('PING CHECKER - Passing to Conditional'); 


//Finds RegExp of pingchecker from msg which is the live feed to rcon 
    while((highping = pingchecker.exec(msg))) { 
    console.log('SteamID: ' + highping[1] + ' PlayerName: ' + highping[2] + ' Ping: ' + highping[3]) //outputs one player as normal. 
    } 

}