簡體   English   中英

從文本中提取數字的最佳方法是什么

[英]What is the best way to extract the numbers out of this text

P1W2DT6H21M32S

想知道從此處提取數字的最佳方法。

W = Weeks
D = Days
H = Hours
M = Minutes
S = Seconds

這樣的事情僅適用於M和S,似乎我做的不對。

    var time = "PT44M7S";
    var minutes = time.substring(2, time.indexOf("M"));
    var seconds = time.split("M")[1].substring(0, time.split("M")[1].indexOf("S"));
var timePeriod = {};
var str = 'P1W2DT6H21M32S';
var re = /(\d+)([WDHMS])/g;
while (result = re.exec(str)) {
    timePeriod[result[2]] = parseInt(result[1], 10);
}
console.log(timePeriod);

應該產生:

{ W: 1, D: 2, H: 6, M: 21, S: 32 }

您可以拆分字母,盡管會在數組中得到前導和尾隨空格:

'P1W2DT6H21M32S'.split(/[AZ]/)

使用正則表達式,您可以“可選地”捕獲每個組,然后根據需要調用它們:

(?:(\d+)W)?(?:(\d+)D?)?(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?

var re = /(?:(\d+)W)?(?:(\d+)D?)?(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?/gm; 
var str = 'P1W2DT6H21M32S\nPT44M7S\n';
var subst = 'Week: $1\nDay: $2\nHour: $3\nMinute: $4\nSecond: $5\n'; 
var result = str.replace(re, subst);

如何將末端的非數字部分丟掉然后拆分其余的非數字塊呢?

var justNumbers = "P1W2DT6H21M32S".replace(/^\D|\D$/g, "").split(/\D+/);

那應該給你一個干凈的數字數組。

如果要將結果數組值存儲在更容易理解的對象中,則可以添加以下內容:

var keys = ["weeks", "days", "hours", "minutes", "seconds"];

var time = {};

for (var k = 0; k < keys.length; k++) {
    time[keys[k]] = justNumbers[k];
}

JSFiddle: http : //jsfiddle.net/briansexton/AXh7F/

考慮這樣的正則表達式:

/P(?:(\d+)W)?(?:(\d+)D)?T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?/

然后,這些值將在組1 = W,2 = D,3 = H,4 = M,5 = S中。

這種與普通拆分相比的優勢在於,如果省略了任何字段,只要提供的字段保持順序,它仍然可以正常工作。

我不知道為什么會有這兩個字母:P和T。但是由於它們在那里,您需要刪除它們。 因此,您可以拆分文本,然后從剛獲得的數組中刪除空字符串:

var time = 'P1W2DT6H21M32S';

time = time.split(/[A-Z]/);
time = time.join(',').replace(/,,/g, ',').substr(1).slice(0, -1).split(',');

> ["1", "2", "6", "21", "32"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM