正则表达式从捕获组开始

时间:2017-10-09 18:29:11

标签: javascript regex pattern-matching

我有这个regEx来匹配以下模式:

/(((fall|spring|summer)\s\d{4});|(waived)|(sub\s[a-zA-Z]\d{3}))/ig

应匹配:

fall 2000;
spring 2019; waived
summer 1982; sub T676

不应与不以第一个捕获组((fall|spring|summer)\s\d{4})开头的 ANY 字符串匹配,例如:

waived Fall 2014;
sub Fall 2011; waived

确保每个匹配的模式都以此组((fall|spring|summer)\s\d{4})开头 我尝试在第一组^之前添加/(^((fall|spring|summer)\s\d{4});|(waived)|(sub\s[a-zA-Z]\d{3}))/ig,但结果不一致。

Demo

1 个答案:

答案 0 :(得分:2)

您可以使用

/^(fall|spring|summer)\s\d{4};(?:.*(waived|sub\s[a-zA-Z]\d{3}))?/i

请参阅regex demo

<强>详情

  • ^ - 字符串开头
  • (fall|spring|summer) - 三种选择之一
  • \s - 空白
  • \d{4} - 4位数
  • ; - 分号
  • (?:.*(waived|sub\s[a-zA-Z]\d{3}))? - 可选序列:
    • .* - 除了换行符之外的任何0+字符,尽可能多(如果您需要的值更接近字符串的开头,则替换为惰性.*?对应字符)
    • ( - 分组构造的开始
      • waived - waived子字符串
      • | - 或
      • sub - sub子字符串
      • \s - 子字符串
      • [a-zA-Z] - ASCII字母
      • \d{3} - 三位数
    • ) - 分组结构的结尾。