【问题标题】:Complicated Regular expression in javascript?javascript中复杂的正则表达式?
【发布时间】:2018-06-29 13:26:30
【问题描述】:

我有一个很长的字符串,我想从该字符串中找到 CAS 编号,其模式如下:

2到7位-2位-1位

例子:

1154-12-6, 127946-96-2

我正在使用以下正则表达式来获取此号码:

str.match(/([0-9]{2,7})-([0-9]{2})-[0-9]/)

但对于包含“29022-11-5”的示例,它给了我 [“29022-11-5”、“29022”、“11”]。

请告诉我该怎么做。

console.log(

    "A long string with a number 29022-11-5 somewhere".match(/([0-9]{2,7})-([0-9]{2})-[0-9]/)
)    

// it is giving me ["29022-11-5", "29022", "11"].

【问题讨论】:

  • 到底是什么问题?这对我来说似乎是正确的答案。
  • 这可能是重复的,但不是那个的重复。我仍然不清楚 OP 在问什么,因为他的正则表达式在这里似乎运行良好。
  • 我给你做了一个sn-p来显示minimal reproducible example
  • 我只想找到一个数字 "29022-11-5" 而不是这些值 ["29022", "11"]

标签: javascript regex string match


【解决方案1】:

您可以使用/g 标志来查找所有匹配项,并使用单词边界\b 来确保您的号码不属于更大的匹配项。如果不使用捕获组,则可以省略它们。

\b[0-9]{2,7}-[0-9]{2}-[0-9]\b

let strings = [
  "29022-11-5",
  "1154-12-6, 127946-96-2"
];

let pattern = /([0-9]{2,7})-([0-9]{2})-[0-9]/g;

strings.forEach((s) => {
  console.log(s.match(pattern));
});

【讨论】:

    【解决方案2】:

    如果我理解正确的话,这可能就是你要找的东西:

    str.match(/[0-9]{2,7}-[0-9]{2}-[0-9]/)

    你得到["29022-11-5", "29022", "11"],因为你的正则表达式中有(),这意味着它将对结果进行分组,但如果你删除它,你将得到没有组的结果,这应该是你想要的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 2017-04-19
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      相关资源
      最近更新 更多