【问题标题】:JavaScript RegEx - Matching One Expression First, then another [duplicate]JavaScript RegEx - 首先匹配一个表达式,然后是另一个[重复]
【发布时间】:2018-09-19 19:02:05
【问题描述】:

我正在尝试使用 JavaScript 正则表达式来检查字符串是否匹配特定的一组字母,后跟 5 个或 6 个数字。例如,如果字符串是'MyValue12345 blah blah MyValue123456 blah MyValue222221',它应该返回匹配的['MyValue12345', 'MyValue123456', 'MyValue222221']。我是 RegEx 新手(显然),我的表达方式很接近,但不完全是我想要的......

这是我的第一次尝试:

var str = 'MyValue12345 blah blah MyValue123456 blah MyValue222221';
var matchArr = str.match(/MyValue\d\d\d\d\d|MyValue\d\d\d\d\d\d/gi);

matchArr 然后等于['MyValue12345', 'MyValue123456', 'MyValue22222'],但是MyValue22222 的最后一个值不是我要找的,我想让它说出MyValue222221 的完整表达式。我知道有更好的方法可以做到这一点,但我很难得到它......有什么想法吗?

【问题讨论】:

  • 我收到["MyValue12345", "MyValue12345", "MyValue22222"]
  • 是的,我想我有一些错别字;此后我进行了一些编辑...但基本上我希望最后一个元素是 MyValue222221 而不是 MyValue22222
  • 您可以使用+ 使选择变得贪婪吗? MyValue\d+?

标签: javascript regex match


【解决方案1】:

使用quantifier range {n,m} (regex101):

var str = 'MyValue12345 blah blah MyValue123456 blah MyValue222221';
var matchArr = str.match(/MyValue\d{5,6}/gi);

console.log(matchArr);

【讨论】:

    【解决方案2】:

    正则表达式尝试应用您的| alternative 的第一个模式,当它匹配时就是结果。只有当它不匹配时,它才会尝试第二种选择。因此,您可以交换两者以使其工作:

    /MyValue\d\d\d\d\d\d|MyValue\d\d\d\d\d/gi
    

    但是,这是相当重复的 - 最好使用 group 来解决差异:

    /MyValue\d\d\d\d\d(?:\d|)/gi
    //                ^^^^^^^ one digit or none
    

    您可以使用匹配“one or nothing”的? modifier 在语法上缩短它:

    /MyValue\d\d\d\d\d\d?/gi
    //                ^^^ one digit or none
    

    最后但并非最不重要的一点是,您需要查看repetition syntax

    /MyValue\d{5}\d?/gi
    //      ^^^^^ five digits
    /MyValue\d{5,6}/gi
    //      ^^^^^ five or six digits
    

    【讨论】:

      猜你喜欢
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 2021-04-05
      相关资源
      最近更新 更多