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

正規表現の例へのリンク

キャプチャ/非キャプチャ グループを正しく設定していないと確信しています。どんな助けでも大歓迎です。

4

1 に答える 1

0

これはあなたのためにそれを行うことができます。抽出正規表現を使用すると、値はグループ 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* 
      (?:
           (?= , )
        |  $ 
      )
 )
于 2014-09-26T18:32:19.660 に答える