使用正则表达式匹配器从字符串中提取高速公路

Extracting highways from a string using regular expression matcher

我正在使用正则表达式匹配器从文本中提取部分字符串。

例如这是正文:

var str = "I-35 South / US-290 West"

我想提取两个字符串,

  1. I-35 南
  2. US-290 西。

我尝试了下面的模式,它在测试方法上返回 true。但是没有返回预期的匹配项。

var pattern = /^(I|US|TX)-\d{1,3}.*$/

str.match(pattern)

Returns

  1. “I-35 南/US-290 西”
  2. “我”

如果我删除“.*”匹配就不会发生。

感谢任何帮助。

使用matches我们可以尝试:

var str = "I-35 South / US-290 West";
var highways = str.match(/[A-Z]+-\d+ \w+/g);
console.log(highways);

请注意,如果您的输入始终是一个以斜线分隔的高速公路列表,那么您也可以按该分隔符拆分:

var str = "I-35 South / US-290 West";
var highways = str.split(/\s*\/\s*/);
console.log(highways);

因为你想在同一个字符串中进行多次匹配,你可以省略锚点 ^$,也可以省略 .*,后者将匹配到字符串的末尾。

如果只得到匹配,你也可以把捕获组变成非捕获组。

注意在正则表达式后添加 /g 标志以获取所有匹配项。

\b(?:I|US|TX)-\d{1,3} \w+

说明

  • \b一个单词边界
  • (?:I|US|TX) 匹配任何选项
  • -\d{1,3}匹配-和1-3位数字
  • \w+匹配一个space和1+个单词字符

Regex demo

var str = "I-35 South / US-290 West"
var pattern = /\b(?:I|US|TX)-\d{1,3} \w+/g;
console.log(str.match(pattern));