【问题标题】:Extracting highways from a string using regular expression matcher使用正则表达式匹配器从字符串中提取高速公路
【发布时间】:2021-10-10 05:55:56
【问题描述】:

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

例如这是正文:

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)

返回

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

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

任何帮助表示赞赏。

【问题讨论】:

  • .* 表示匹配任何内容,末尾的 $ 表示它应该以该字符结尾

标签: javascript regex regex-group


【解决方案1】:

由于您希望在同一字符串中有多个匹配项,您可以省略锚点 ^$,也可以省略 .*,这将匹配到字符串的末尾。

为了只得到匹配,你也可以将捕获组变成非捕获组。

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

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

说明

  • \b一个字边界
  • (?:I|US|TX) 匹配任何选项
  • -\d{1,3} 匹配 - 和 1-3 位数字
  • \w+匹配一个空格和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));

【讨论】:

    【解决方案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);

    【讨论】:

    • 太棒了!,我会接受 /[A-Z]+-\d+ \w+/g
    猜你喜欢
    • 2022-10-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多