2

アルファベットの有限の繰り返しと、2 つの別々の RegEx の数字をチェックする RegEx がありますが、1 つの RegEx に結合しようとしていますが、常に true を返します。

// Alphabetes testing:
/([a-z])\1{4,}/.test("sd0") => false
/([a-z])\1{4,}/.test("adsssssd0") => true
// Numeric testing:
/([0-9])\1{3,}/.test("sd00000ds") => true
/([0-9])\1{3,}/.test("sd00s00ds") => false
/(([a-z])\1{4,})|(([0-9])\1{3,})/.test("sd0sds0sds") => true // always true

ありがとう。

4

4 に答える 4

2

Just use

([a-z0-9])\1{3,}

See it here on Regexr

あなたの表現の問題は、キャプチャ グループの番号付けです。開き括弧の順に番号が付けられています

(([a-z])\1{3,})|(([0-9])\1{3,})
12              34

したがって、後方参照を使用すると、常に参照しています(([a-z])\1{3,})。グループ自体(再帰的)内のグループを参照するとどうなるかわかりません。すべての文字に一致するようです(Regexr

アップデート:

異なる長さの要件がある場合は、代替を使用する必要がありますが、代替では異なるグループを参照する必要があります!

(?:([a-z])\1{4,}|([0-9])\2{3,})

(?:非キャプチャ グループです ==> 後方参照ではカウントされません

ここでRegexrを参照してください

于 2013-02-21T07:31:38.543 に答える
1

次の正規表現はどうですか?

([a-z0-9])\1{3,}

3桁以上の数字/文字が連続して繰り返されるたびに必要なものが一致する場合、それは機能します。

于 2013-02-21T07:29:54.347 に答える
1

英字または数字のいずれかの文字セットをチェックしています。中盤と終盤の為リターンしますsd0sds0sdstruesds

文字列を両方の条件に一致させたい場合は、3 文字の文字セットと 3 文字の数字セットが必要ですが、単一の正規表現を使用してこれを行うことはできないと思います。

文字列に文字または数字の 3 文字セットを許可する場合は、他の回答が適切です (後方参照なし)。

[a-z0-9]{3}
于 2013-02-21T07:30:54.660 に答える
1

最後の正規表現には間違いがあります:

(([a-z])\1{4,})|(([0-9])\1{3,})

\1 参照を 2 回使用しますが、\1 は括弧内の最初のブロックを参照します。

([a-z])\1{4,})|(([0-9])\1{3,}

参照番号を修正すると、正規表現は実際に機能します

(([a-z])\2{4,})|(([0-9])\4{3,})

実際に見てみましょう: http://regexr.com?33rnk

于 2013-02-21T08:20:55.303 に答える