我有这个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
,但结果不一致。
答案 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}
- 三位数)
- 分组结构的结尾。