私は次の正規表現を持っています:
(\d{5}[,])
これは次のように一致します。
12005,11111,11111,
しかし、末尾のコンマをオプションにするにはどうすればよいですか?
編集:
許容できる結果は次のとおりです。
12005,
11111,11111,
12005
11111,11111
許容できない:
123456
123456,
12345,123456
123456,123456
私は次の正規表現を持っています:
(\d{5}[,])
これは次のように一致します。
12005,11111,11111,
しかし、末尾のコンマをオプションにするにはどうすればよいですか?
編集:
許容できる結果は次のとおりです。
12005,
11111,11111,
12005
11111,11111
許容できない:
123456
123456,
12345,123456
123456,123456
(\d{5})(?:,|$)
トリックを行う必要があります。
これを分解するには、
\d{5}
-5桁(?:...)
-かっこを使用して|
,
-リテラルコンマ$
-入力の終わり,|$
-コンマまたは入力の終わり。この|$
部分は、。のようにコンマで区切られていない数字のグループが誤って一致するのを防ぐために必要です"01234567889"
。
実際の動作を確認するには、
JSON.stringify(
["01234", "01234,", "01234,56789", "01234,56789", "", "0123456789"]
.filter(
function (s) {
return /^(?:(\d{5})(?:,|$))+$/.test(s);
}))
これは、より大きな正規表現を使用してこれらのグループの1つ以上に一致するため、
["01234","01234,","01234,56789","01234,56789"]
(\d{5}[,]?)
一致します
12005,11111,11111,
また
12005,11111,11111
6桁以上の数字から5桁が一致しないようにするには、次のように、単語境界アサーション(\b
)と行頭アサーション()を使用し^
ます。
(?:\b|^)(\d{5})(?:,|$)
おそらくこれ:
((?:\d{5},)*\d{5})
5つの数字の1つのセット、またはコンマで区切られた複数の数字の場合に機能します。または、完全に明示的にして、開始と終了を平手打ちすることもできます。
^((?:\d{5},)*\d{5})$
\d{5}[,]*
-0以上または\d{5}[,]?
-0または1。