2012-08-29 37 views
0

我知道這個問題已被多次詢問,但這些例子並不適合我。正則表達式匹配某個字符後的所有文本是什麼?

我想在單個正則表達式中獲得時間的微小部分。我擁有的是:

minute = new RegExp(":[0-9]{1,2}").exec(time).toString().replace(":", ""); 

如何在不使用.replace的情況下完成此操作?

+0

什麼是'time'變量是指什麼? – James

+0

@ 999,我想時間包含了一些類似於'18:28'的東西。 – micnic

+1

爲什麼不用':'來分割...? –

回答

2

使用捕獲組來獲取你想要的。

var time = '12:29', 
    minute = /:([0-9]{1,2})/.exec(time)[1]; 

// minute is "29" 
+0

這工作。 thx人 –

4

假設時間是格式NN:NN那麼分鐘可以提取像這樣的:

minute = time.match(/\d{2}$/)[0]; 

或一個簡單的分裂:

minute = time.split(':')[1]; 
0

你需要某種位置錨來抓住字符串的最後一部分

(/:([0-9]{1,2}$)/) 
0

試試這個:

minute = new RegExp(":([0-9]{1,2})").exec(time)[1]; 

這將匹配整個事情,但無論儲存在括號中的部分匹配供以後使用。因此[1]



要離開這裏下面,萬一有人來尋找一個非JavaScript的答案。

這不會在javascript中工作,因爲它不支持lookbehinds。謝謝@ 999。

嘗試使用積極lookbehind。這樣你甚至不需要更換:)

minute = new RegExp("(?<=:)[0:9]{1,2}").exec(time).toString(); 

[0:9]{1,2}是你實際想要匹配的模式。 (?<=:)只是確保它背後有一個冒號,而沒有真正消費任何東西。

+0

JavaScript不支持正則表達式中的逆序。 – James

+0

@ 999哦。廢話。你是對的。要編輯 –

+0

當我在編輯過程中,對downvotes的數量感到驚訝。好吧。 –

1

將「時間」存儲爲Date對象,如果您尚未這樣做。然後,您可以使用getMinutes()將分鐘組件拉出。

minute = time.getMinutes(); 
1

假設time就像是 「10:15 AM」 時間字符串,你可以(也應該)使用Date對象。這是工作的正確工具,它更加靈活,因爲它可以處理日期/時間數據。

var time = '10:15 AM'; 
// handle either a full date string OR a time string 
var d = new Date(time); 
if (isNaN(d.getTime())) 
    var d = new Date('1/1/2012 '+time); 

試試:http://jsfiddle.net/gsg8X/

可能比試圖確定是否秒是有或沒有,這可能打破正則表達式,或使其複雜得多,它需要更好。我認爲你最好使用日期/時間相關的工具來解析日期/時間相關的數據。

文檔

相關問題