【问题标题】:How to write (A or B or C) followed by X in JavaScript regex? [duplicate]如何在 JavaScript 正则表达式中编写(A 或 B 或 C)后跟 X? [复制]
【发布时间】:2016-10-24 12:14:01
【问题描述】:

我想在格式上匹配一个字符串:

"XYZ 1234.10"
//XYZ can be one of a relatively large, but defined, set of 3 uppercase letter combination.
//String must start with XYZ or other from allowed set
//1234 can be an integer of arbitrary length >= 0
//10 can be an arbitrary integer in the range 0-99, but must have string-length of 2. (eg. 00, 03, 82)
//String must end with .NN (dot, number, number) /\.\d\d$/

我尝试了以下正则表达式,但捕获了“XYZ”以及“XYZ 1234.10”:

var regex = /^(XYZ|ABC|QST) \d+\.\d\d$/
regex.exec("XYZ 1234.10")
// => ["XYZ 1234.10", "XYZ"] would like it to be ["XYZ 1234.10"]

我想只匹配完整的表达式。我一直无法找到用 javascript 正则表达式表达这一点的方法。

这完全可以实现吗?如果是这样:怎么做?

【问题讨论】:

  • console.log(regex.exec("XYZ")) 结果为 null。您的正则表达式看起来或多或少是正确的。
  • 我很困惑 - 你确实在零位得到你想要的。你不想捕捉其他任何东西吗?
  • 为什么投反对票?
  • @WiktorStribiżew:在欺骗目标上不错。我没想到会有这样一个清晰的好。
  • @WiktorStribiżew:改进了我的解释。还;感谢您指出我的实际问题。

标签: javascript regex


【解决方案1】:
 // => ["XYZ 1234.10", "XYZ"] would like it to be ["XYZ 1234.10"]

exec 为您提供整体匹配,然后是捕获组的内容。如果您不希望该组捕获,请将其设为非捕获组:

var regex = /^(?:XYZ|ABC|QST) \d+\.\d\d$/;
// ------------^^
console.log(regex.exec("XYZ 1234.10"));

【讨论】:

    【解决方案2】:

    您正在混合匹配组和捕获组。使用非捕获组查看输出:

    var regex = /^(?:XYZ|ABC|QST) \d+\.\d\d$/;
    console.log(regex.exec("XYZ 1234.10"));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      • 2021-07-04
      • 2015-02-20
      • 2021-01-10
      • 2021-07-15
      • 2020-08-02
      相关资源
      最近更新 更多