文字列に3桁が含まれているかどうかをテストできる正規表現(!)はありますか(順序は気にしないでください)?
(少なくとも3桁。また、正確な3つの解決策を見てうれしいです。(親切であれば))
例 :
abk2d5k6 //3 digits
abk25k6d //same here //3 digits
私の失敗の試み:
.+?(?=\d){3}
ありがとう。
(学習目的で、正規表現ソリューションのみをお願いします。)
文字列に3桁が含まれているかどうかをテストできる正規表現(!)はありますか(順序は気にしないでください)?
(少なくとも3桁。また、正確な3つの解決策を見てうれしいです。(親切であれば))
例 :
abk2d5k6 //3 digits
abk25k6d //same here //3 digits
私の失敗の試み:
.+?(?=\d){3}
ありがとう。
(学習目的で、正規表現ソリューションのみをお願いします。)
さて、学習目的で、この非常に包括的なチュートリアルを読むことをお勧めします。
それ以外の場合、JavaScript 正規表現はおそらく次のようになります。
少なくとも3桁あることを確認したい場合:
/^(?:\D*\d){3}/
または、正確に 3 桁であることを確認したい場合は、次のようにします。
/^(?:\D*\d){3}\D*$/
\D
数字以外の任意の文字です。*
それらの 0 以上を許可します。\d
任意の数字です。{3}
サブパターンを 3 回繰り返します。And^
と$
は、それぞれ文字列の開始と終了をマークします。
次のようなこともできます。
str.match(/\d/g).length >= 3
これは非常に単純で、複雑な正規表現なしで意図を非常に明確に示しています。
ただし、これは速度に合わせて調整されていません。
「少なくとも」3桁が必要だというコメントを考えると、次のように複雑にする必要はないと思います。
/\d.*\d.*\d/
...これは数字、次にゼロ以上の何か、次に別の数字、次にゼロ以上の何か、そして別の数字です。どちらの端も固定していないので、両端に暗黙の「ゼロ以上の何か」があります。
console.log(!!"abk2d5k6".match(/\d.*\d.*\d/)); // true
console.log(!!"abk25k6d".match(/\d.*\d.*\d/)); // true
console.log(!!"abkd5k6".match(/\d.*\d.*\d/)); // false (I removed a digit)
console.log(!!"abk2k6d".match(/\d.*\d.*\d/)); // false (I removed a digit)
また
/(\d.*){3}/
console.log(!!"abk2d5k6".match(/(\d.*){3}/)); // true
console.log(!!"abk25k6d".match(/(\d.*){3}/)); // true
console.log(!!"abkd5k6".match(/(\d.*){3}/)); // false (I removed a digit)
console.log(!!"abk2k6d".match(/(\d.*){3}/)); // false (I removed a digit)
または、以下のコメントで m.buettner が指摘しています。.
使用できるのではなく\D
(数字ではありません):
/\d\D*\d\D*\d/
また
/(\d\D*){3}/
display(!!"abk2d5k6".match(/\d\D*\d\D*\d/)); // true
display(!!"abk25k6d".match(/\d\D*\d\D*\d/)); // true
display(!!"abkd5k6".match(/\d\D*\d\D*\d/)); // false (I removed a digit)
display(!!"abk2k6d".match(/\d\D*\d\D*\d/)); // false (I removed a digit)
display(!!"abk2d5k6".match(/(\d\D*){3}/)); // true
display(!!"abk25k6d".match(/(\d\D*){3}/)); // true
display(!!"abkd5k6".match(/(\d\D*){3}/)); // false (I removed a digit)
display(!!"abk2k6d".match(/(\d\D*){3}/)); // false (I removed a digit)
基本的に、「少なくとも」一致する場合はアンカーは必要ありません。