我有一个可以在第一个数字
分割字符串的正则表达式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 :(得分: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有一句名言,一个非常聪明的人。它是这样的:
有些人在面对问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题“。
这句话有很多道理。
答案 1 :(得分:0)
给出字符串:
1:30 Ayr
此正则表达式中的捕获组将为您提供Ayr
:
^[^a-zA-Z]*([a-zA-Z\s]+)$
正则表达式键
^
- 比赛开始[^a-zA-Z]*
- 从0到任意数量的非字母字符([a-zA-Z\s]+)
- 捕获组:从1到任意数量的字母字符和空格 $
- 比赛结束