2010-06-15 157 views
1

我只是問了一個問題關於正則表達式,並獲得了極大的答案:JavaScript Split without losing character的Javascript分裂與正則表達式

現在,我還有一個問題。

我現在的正則表達式如下:

var split = text.split(/(?=\w*\d*\d:\d\d)/); 

基本上,我試圖使用時間戳分裂(如 - 9:30或10:30,它們之間的區別是額外位後者)。我如何去做這件事?

目前,如果我有這兩個:

9:30 pm 
The user did action A. 

10:30 pm 
Welcome, user John Doe. 

劈叉是:

9:30 pm 
The user did action A. 
---- 
1 
---- 
0:30 pm 
Welcome, user John Doe. 

如何添加一個可選的檢查在時間戳的第一個字符?

謝謝!

+0

當參數是一個正則表達式時,瀏覽器在split()方法中存在各種不兼容性。看到這個:http://blog.stevenlevithan.com/archives/cross-browser-split – Pointy 2010-06-15 18:25:37

回答

1

my answer到您的其他問題,我通過增加一個字邊界固定在正則表達式這個問題:

var split = journals.split(/\s*(?=\b\d+:)/); 

\s*更新它去掉任何不必要的空格(而不是換行符)了。結果:

["9:30 pm  
The user did action A.", "10:30 pm 
Welcome, user John Doe.", "11:30 am 
Messaged user John Doe"] 
+0

非常完美,非常感謝! – Rohan 2010-06-16 06:54:15

1
var split = text.split(/(?=\w*[\d]{1,2}:[\d]{2})/); 

RegexPal對這些任務很有幫助。

+0

謝謝,但它似乎並沒有工作。 – Rohan 2010-06-15 17:58:31

+0

哪個不 - 該模式或網站?如果您正在使用該網站,則需要放入該模式,即'(\ w * \ d * \ d:\ d \ d)'將匹配您輸入的內容。 – Andy 2010-06-15 18:09:45

+0

+偉大的鏈接 – chapluck 2010-06-15 18:19:58

1

我不清楚你想對文本做什麼,但我確實有一個正則表達式,希望能幫助匹配時間。

\d{1,2}:\d{1,2} (am|pm) 

你的正則表達式和安迪的正則表達式的問題是*是貪婪的。這意味着零次或多次匹配,儘可能多的次數爲使用{min,max}所需的確切數字將會更準確,避免貪婪*。

編輯:安迪的確在他所鏈接的那個網站上工作。 *看起來並不貪婪。兩種模式都適合你嗎?

+0

'{min,max}'是我第一次嘗試。真正的問題是向前看,它會向前看,並找到'0:30'並且分裂,而不是'10:30'。添加所需的單詞邊界會強制向前查找「單詞」開始的位置。 +1,歡迎來到Stack Overflow :-) – 2010-06-15 19:14:01