2017-10-09 22 views
1

我有這樣的正則表達式匹配以下模式:正則表達式來開始捕獲組

/(((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})如:

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

+0

「*結果不一致*」不是問題描述。見[mcve]。 – melpomene

+0

演示鏈接...... – hello

+0

https:// stackoverflow。com/help/how-to-ask:如果可以創建一個可以鏈接到的問題的實例(例如http://sqlfiddle.com/或http://jsbin.com/)然後這樣做 - 但是*還包括代碼在您的問題本身*。 – melpomene

回答

2

您可以使用

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

regex demo

詳細

  • ^ - 三項選擇
  • \s之一 - - 一個空白
  • \d{4} - 4位數
  • ; - 串
  • (fall|spring|summer)開始半冒號
  • (?:.*(waived|sub\s[a-zA-Z]\d{3}))? - 的可選順序:
    • .* - 任何0+字符不是換行字符等,儘可能多的(如果你需要的值接近字符串的開頭,帶有水上.*?對應更換)
    • ( - 一個分組的開始構建
      • waived - 一個waived
      • | - 或
      • sub - 一個sub
      • \s - 一個子
      • [a-zA-Z] - ASCII字母
      • \d{3} - 三位數字
    • ) - 分組構建體的末端。