私は、私は完全に正規表現マッチングパターンの要件を理解していないが、ここで予備的なアプローチがあります。 [一致する]
- 私はあなたを理解したよう、数字は長さ5または6を持つことができますし、マッチングパターンは、この記述に合う数字の任意の量をキャプチャすることができるはず。この部分では、アスタリスク文字(*)が数字列に含まれていないと仮定します。
変数input
には、値として文字列213433,123453,123*
が割り当てられているとします。次に...
input.match(/\d{5,6}(?!\*)/g);
は、このように変数input
の部分をキャプチャする必要があります。試しにキャラクタセットを使用していたことがわかりました(、つまり、[0-9]
部分)。 (?!\*)
部分は、5桁または6桁のシーケンスの後にアスタリスク文字がないことを確認するために使用されます。注:アスタリスクをエスケープする必要があります。
- 入力にアスタリスク文字が含まれている場合、一致する部分は5文字以内にすることができます。 (私は正しくプロンプトを理解していることを願っています)!このために、次のRegExpパターンは、(私が実行した)2つのテストで(まったく徹底的に)実行されました。注:このパターンでは、アスタリスク文字と数字シーケンス(、つまり、一致/取り込み)が保持されます。
ここではinput
変数は次の正規表現のマッチパターンをテストする目的のために、文字列1123*,2133*,123*,1*
に割り当てられていると仮定することができます。
input.match(/(\d+\*){1,5}/g);
私は間違っていない場合は、2つの試合のパターンは条件付きでシンプルOR(|
)演算子を使って組み合わせることができます。
input.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g);
うまくいけば、少し助けてください。最後のテストとして、1123*,2133*,123*,1*,123333,123623,678123,12323
という文字列にinput
変数を代入してみましょう(この例では、入力例1と3を連結しています)。
["1123*", "2133*", "123*", "1*", "123333", "123623", "678123", "12323"]
あなたが任意のワイルドカード文字(*)なしで一致を検索したい場合は、次のように、あなたは、単に式を変更できます:
a.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g).map(val => val.replace('*', ''));
を次に、直接上記のステートメントを実行すると、配列を返します...
["1123, "2133", "123", "1", "123333", "123623", "678123", "12323"]
パターンを説明できますか? – Barmar
これはあなたが1時間前に尋ねたのと同じ質問ではありませんか? http://stackoverflow.com/questions/40535382/regex-for-number-series-validation – Barmar
要件をマイナス - 私はそれらを追加しました – mplungjan