2014-09-26 16 views
1

我一直在這個時間太長,試圖找出如何匹配逗號分隔的值串,同時將這些值拆分爲它們自己的捕獲組。下面是我的要求:將每個匹配的值放入其自己的捕獲組中

  • 沒有領先的逗號
  • 條款可以是字母數字,用1和7個字符之間閩
  • :1項;馬克斯:術語和逗號
  • 沒有後面的逗號

我如此接近無限之間

  • 無限的空白,但我沒能獲得字符串中的所有條款納入自己的捕捉組。相反,它將第一個捕獲組的最後匹配項放入組#1,而不是將所有匹配放入先前的組。因此,這裏是我的例子:

    ABC1234,def5678,ghi9012

    我希望ABC1234是組#1,def5678是組#2,和ghi9012是組3#。相反,使用下面的表達式,我得到組1中的def5678和組2中的ghi9012。

    /(?:([A-z0-9]{1,7})\s*,\s*)+([A-z0-9]{1,7})/g

    Link to RegExr example

    我敢肯定我沒有設置我的拍攝/非捕獲組正確。任何幫助將不勝感激。

  • +1

    你不能做這種方式,你的正則表達式只有2個捕獲組(第一個由外部(每次被改寫:?())'+'來做到這一點的唯一方法是一次只能匹配1個字段 – sln 2014-09-26 18:24:51

    回答

    0

    這可以爲你做。使用提取正則表達式該值在組1中。同時該值被修剪。
    讓我知道你是否需要一個引用字段。

    請注意,除非提前驗證,否則無法使用提取字符1,
    強制執行1-7個字符的要求。

    驗證的正則表達式:

    # /^(?:(?:(?:^|,)\s*)[a-zA-Z0-9]{1,7}(?:\s*(?:(?=,)|$)))+$/ 
    
    ^  
    (?: 
         (?:       # leading comma + optional whitespaces 
          (?:^| ,) 
          \s* 
        ) 
         [a-zA-Z0-9]{1,7}    # alpha-num, 1-7 chars 
         (?:       # trailing optional whitespaces 
          \s* 
          (?: 
           (?= ,) 
          | $ 
          ) 
        ) 
    )+ 
    $ 
    

    提取正則表達式。

    # /(?:(?:^|,)\s*)([^,]*?)(?:\s*(?:(?=,)|$))/ 
    
    
    (?:       # leading comma + optional whitespaces 
         (?:^| ,) 
         \s* 
    ) 
    ([^,]*?)     # (1), non-quoted field 
    (?:       # trailing optional whitespaces 
         \s* 
         (?: 
          (?= ,) 
         | $ 
        ) 
    ) 
    
    +0

    所以這聽起來像是我需要將它分成兩步,而不是試圖在一個步驟中完成它提示你真正理解這些東西 – 2014-09-26 19:19:23

    +0

    只是猜測,通常是試驗和錯誤.. – sln 2014-09-26 19:22:21

    相關問題