2017-01-04 53 views
0

我有一個正則表達式,可以在第一位分割字符串使用正則表達式的第一個字母分割字符串

var name = 'Achill Road Boy 1:30 Ayr' 
var horsedata = name.match(/^(\D+)(.*)$/); 
var horse = horsedata[1]; // "Achill Road Boy " 
var meeting = horsedata[2]; // "1:30 Ayr" 

不過,我現在需要進一步分裂

var meetingdata = meeting.match(?what is the regex); 
var racetime = meetingdata[1]; // "1:30 " 
var course = meetingdata[2]; // "Ayr" 

是什麼正則表達式來分割字符串的第一個字母?

+0

/\ s [a-zA-Z] +/g這是否合適。如果這個'['Achill Road Boy','1:30','Ayr']'應該是最終結果,那麼會帶回第一個詞包括空格 –

+0

? – RomanPerekhrest

回答

5

您可以使用正則表達式單做:

^([^\d]+) +(\d+):(\d+) (.*)$

它可以捉住名字,小時和分鐘分開,與曲目名稱,組1,2,3和4

請注意,我已經在表達式中添加了^和$,這意味着此表達式應該從開始到結束完全匹配給定的字符串,我認爲這對於匹配您最初不期望的字符串內的某些內容是有用的保護措施。但是,他們可能會干擾你的任務,所以如果你不需要他們,你可以將他們刪除。

當修改正則表達式時,我總是使用這個漂亮的工具,http://regex101.com - 它有一個非常有用的接口來調試正則表達式以及它們的執行時間。以下是上述正則表達式的鏈接:https://regex101.com/r/jYgc9K/1。它也給你這個正則表達式的一個很好的明確的細分:

Full match 0-24 `Achill Road Boy 1:30 Ayr` 
Group 1. 0-15 `Achill Road Boy` 
Group 2. 16-17 `1` 
Group 3. 18-20 `30` 
Group 4. 21-24 `Ayr` 

最後,建議的話:有一句名言由Jamie Zawinski撰寫,一個非常聰明的傢伙。它是這樣的:

有些人在遇到問題時,會想「我知道,我會用正則表達式」。現在他們有兩個問題」

有一個在此說了很多道理

+0

美麗地解決了我的問題。希望Jamie Zawinski不會爲我效力!感謝你及時的答覆。 –

+0

不客氣!我們只希望沒有賽馬名稱會包含任何數字;) –

0

鑑於字符串:。

1:30 Ayr 

從這個正則表達式捕獲組會給你Ayr

^[^a-zA-Z]*([a-zA-Z\s]+)$ 

正則表達式密鑰:

  • ^ - 匹配
  • [^a-zA-Z]*的啓動 - 0到任意數量的非字母表的字符
  • ([a-zA-Z\s]+) - 捕獲組:從1到任何數目的字母字符和空格
  • $ - 比賽結束
相關問題