Javascript regex以捕获组开始

Javascript regex以捕获组开始,javascript,regex,pattern-matching,Javascript,Regex,Pattern Matching,我使用此正则表达式来匹配以下模式: /(((fall|spring|summer)\s\d{4});|(waived)|(sub\s[a-zA-Z]\d{3}))/ig 应匹配: fall 2000; spring 2019; waived summer 1982; sub T676 不应匹配任何不以第一个捕获组开头的字符串((秋季|春季|夏季)\s\d{4}),例如: waived Fall 2014; sub Fall 2011; waived 确保每个匹配模式都从该组开始((秋季|春

我使用此正则表达式来匹配以下模式:

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

fall 2000;
spring 2019; waived
summer 1982; sub T676
不应匹配任何不以第一个捕获组开头的字符串
((秋季|春季|夏季)\s\d{4})
,例如:

waived Fall 2014;
sub Fall 2011; waived
确保每个匹配模式都从该组开始
((秋季|春季|夏季)\s\d{4})
我试着像这样在第一组前面加上
^
/(^((秋季|春季|夏季);(放弃)|(sub\s[a-zA-Z]\d{3}))/ig
,但结果不一致

您可以使用

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

详细信息

  • ^
    -字符串的开头
  • (秋季|春季|夏季)
    -三种选择之一
  • \s
    -空白
  • \d{4}
    -4位数字
  • -分号
  • (?:.*(放弃| sub\s[a-zA-Z]\d{3}))?
    -以下可选序列:
    • *
      -尽可能多的0+字符,而不是换行符(如果需要的值更接近字符串的开头,请替换为惰性的
      *?
      对应项)
    • -分组构造的开始
      • 放弃
        -a
        放弃
        子字符串
      • |
        -或
      • sub
        -a
        sub
        substring
      • \s
        -子字符串
      • [a-zA-Z]
        -一个ASCII字母
      • \d{3}
        -三位数字
    • -分组构造结束

“结果不一致”不是问题描述。请参阅。演示链接……:如果可以创建一个可以链接到的问题的实例(例如,on或),那么就这样做-但也要将代码包含在问题本身中。
\s{1}
在功能上与
\s
相同,但有些人更喜欢更直观的表达。我不喜欢它,但它对读者强调的正是一个,所以它做了一些事情。这是否是件好事还存在争议,但我不会为此责怪任何人。你有什么特别的理由将
^
包含在括号内吗?