5

文字列に3桁が含まれているかどうかをテストできる正規表現(!)はありますか(順序は気にしないでください)?

(少なくとも3桁。また、正確な3つの解決策を見てうれしいです。(親切であれば))

例 :

abk2d5k6 //3 digits
abk25k6d //same here //3 digits

私の失敗の試み:

.+?(?=\d){3}

ありがとう。

(学習目的で、正規表現ソリューションのみをお願いします。)

4

3 に答える 3

11

さて、学習目的で、この非常に包括的なチュートリアルを読むことをお勧めします。

それ以外の場合、JavaScript 正規表現はおそらく次のようになります。

少なくとも3桁あることを確認したい場合:

/^(?:\D*\d){3}/

または、正確に 3 桁であることを確認したい場合は、次のようにします。

/^(?:\D*\d){3}\D*$/

\D数字以外の任意の文字です。*それらの 0 以上を許可します。\d任意の数字です。{3}サブパターンを 3 回繰り返します。And^$は、それぞれ文字列の開始と終了をマークします。

于 2012-11-25T09:16:56.977 に答える
3

次のようなこともできます。

str.match(/\d/g).length >= 3

これは非常に単純で、複雑な正規表現なしで意図を非常に明確に示しています。

ただし、これは速度に合わせて調整されていません。

于 2012-11-25T09:25:15.337 に答える
2

「少なくとも」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)

基本的に、「少なくとも」一致する場合はアンカーは必要ありません。

于 2012-11-25T09:31:05.483 に答える