2016-07-26 57 views
0

所以我這裏有一些文字挑選出每個號碼並將其添加到一個數組

| | Serial: N/A | | UserID: 132382474 | | 
| | Serial: N/A | | UserID: 132382474 | | 
| | Serial: N/A | | UserID: 132382474 | | 
| | Serial: N/A | | UserID: 131046468 | | 

我希望它爲「用戶名」後,讓每一個號碼,並將其放置到一個數組,使用Javascript 我會怎樣做這樣的事情?

+1

有幾種方法。你有沒有嘗試過自己?你有沒有聽說過['split'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split)? –

+0

我不確定如何使用那個對不起 –

+1

然後閱讀一些例子。嘗試一些事情。你必須嘗試想法。沒有人會爲你寫代碼。 –

回答

-1

您可以使用String.prototype.match()提取這些數字,但是您必須使用g標誌,因爲您將提取多個數字,並且String.prototype.match()在全局搜索(如果您計劃使用捕獲)時失敗。您可以使用自定義匹配功能:

var text = "| | Serial: N/A | | UserID: 132382474 | |\ 
 
| | Serial: N/A | | UserID: 132382474 | |\ 
 
| | Serial: N/A | | UserID: 132382474 | |\ 
 
| | Serial: N/A | | UserID: 131046468 | |"; 
 

 
function match(string, regex) { 
 
    var matches = []; 
 
    var match = null; 
 
    while (match = regex.exec(string)) { 
 
    matches.push(match[1]); 
 
    } 
 
    return matches; 
 
} 
 

 
var numbers = match(text, /UserID:\s(\d*)?/g); 
 

 
console.log(numbers);

正則表達式的說明:

  capture only the numbers -> 132382474 
      /-\ 
/UserID:\s(\d*)?/g  g -> global search, search multiple times 
\______________/ 
     | 
search this pattern -> UserID: 132382474 

這是必要的,你通過圖案g標誌,否則while會創建一個無限循環。

或者只是確保使用其他功能的模式有g標誌。這樣,您可以在沒有g標誌的情況下傳遞模式。 global()函數將檢查模式。如果它缺少g標誌,它會自動添加它。

var text = "| | Serial: N/A | | UserID: 132382474 | |\ 
 
| | Serial: N/A | | UserID: 132382474 | |\ 
 
| | Serial: N/A | | UserID: 132382474 | |\ 
 
| | Serial: N/A | | UserID: 131046468 | |"; 
 

 
function match(string, regex) { 
 
    var regex \t = global(regex); 
 
    var matches \t = []; 
 
    var match \t = null; 
 
    while (match = regex.exec(string)) { 
 
    matches.push(match[1]); 
 
    } 
 
    return matches; 
 
} 
 

 
function global(re) { 
 
    var pattern \t = re.source; 
 
    var flags \t = re.global ? re.flags : re.flags += "g"; 
 
    return new RegExp(pattern, flags); 
 
} 
 

 
var numbers = match(text, /UserID:\s(\d*)?/); 
 

 
console.log(numbers);

+0

Can downvoter小心解釋這個答案有什麼問題? – akinuri

0

你看起來有點像管道分隔的數據。不知道到底你在做什麼,但我要承擔以下幾件事:

  • 有時你會之間有那些東西小號| |
  • 你想要的所有數據進來,不只是UserID s
  • 這不是一個節點流或其他流,而只是一個大的文本。如果是這樣,你必須通過行你去打破它了...

所以這裏去...

var someText = 
 
    "| | Serial: N/A | | UserID: 132382474 | |\n" 
 
    +"| | Serial: N/A | | UserID: 132382474 | |\n" 
 
    +"| | Serial: N/A | | UserID: 132382474 | |\n" 
 
    +"| | Serial: N/A | | UserID: 131046468 | |"; 
 

 
var lines = someText.split('\n'); //Break apart by line 
 
var data = lines.map(function(line) { 
 
    var entries = line.split('|'); //Break apart by pipe 
 
    var output = {}; 
 
    entries.forEach(function(entry) { 
 
    var keyValue = entry.split(':'); //Break apart by colon 
 
    if (!keyValue[1]) { 
 
     return; //We don't have something in the form of 'key: value' 
 
    } 
 
    var key = keyValue[0].trim(); //This will get rid of unwanted whitespace 
 
    var value = keyValue[1].trim(); 
 
    output[key] = value; 
 
    }); 
 
    return output; 
 
}); 
 

 
console.log(data);
希望幫助!

+0

這是返回一個包含最後一個id的單個對象的數組。 – akinuri

+0

@akinuri,我已經用示例數據更新它,它現在運行 – matthewmatician

0

你正在尋找一個全球性的比賽,使用此:

text.match(/\d+/g)

給出

var text = "| | Serial: N/A | | UserID: 132382474 | |\ 
| | Serial: N/A | | UserID: 132382474 | |\ 
| | Serial: N/A | | UserID: 132382474 | |\ 
| | Serial: N/A | | UserID: 131046468 | |";