我有一个正则表达式可以在第一位拆分字符串

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"


在第一个字母处分割字符串的正则表达式是什么?

最佳答案

您可以使用单个正则表达式来做到这一点:

^([^\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)有句名言。它是这样的:


  有些人遇到问题时会认为“我知道,我会使用正则表达式”。现在他们有两个问题”。


这句话有很多道理。

关于javascript - 使用正则表达式在第一个字母处拆分字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41473838/

10-11 22:12
查看更多