使用正则表达式在第一个字母处拆分字符串

时间:2017-01-04 21:51:34

标签: javascript regex

我有一个可以在第一个数字

分割字符串的正则表达式
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"

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

2 个答案:

答案 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到任意数量的字母字符和空格
  • $ - 比赛结束