2

こんにちは私はJSでregExを使用して、3つの同一の連続した文字(アルファベット、数字、およびすべての英数字以外の数字である可能性があります)を識別しようとしています。

これにより、3つの同一の連続したアルファベットと数字が識別されます:'(([0-9a-zA-Z])\ 1 \ 1)'
これにより、3つの同一の連続した非英数字が識別されます:'(([^ 0-9a-zA-Z]) \ 1 \ 1) '

次のように両方を組み合わせようとしています:'(([0-9a-zA-Z])\ 1 \ 1)|(([^ 0-9a-zA-Z])\ 1 \ 1)'

しかし、私は何か間違ったことをしていて、それが機能していません。( '88aa3BBdd99 @@'に対してtrueを返します)

編集:そして、3つの同一の文字を見つけるには、これは間違っているようです/(^([0-9a-zA-Z] | [^ 0-9a-zA-Z])\ 1 \ 1)/-> RegEx JSでNo3の同一の連続した文字を見つける

Nohsibに感謝します

4

2 に答える 2

6

問題は、正規表現全体で後方参照が左から右にカウントされることです。したがって、それらを組み合わせると、番号が変わります。

(([0-9a-zA-Z])\2\2)|(([^0-9a-zA-Z])\4\4)

外側の親を削除することもできます。

([0-9a-zA-Z])\1\1|([^0-9a-zA-Z])\2\2

または、1セットの親の選択肢をまとめてキャプチャし、最後に1つの後方参照を追加することもできます。

([0-9a-zA-Z]|[^0-9a-zA-Z])\1\1

しかし、キャラクタークラスはとにかくすべてのキャラクターと一致するので、次のようにすることもできます。

([\s\S])\1\1

また、DOTALLまたはSINGLELINEオプションをアクティブにすると、.代わりに次のものを使用できます。

(.)\1\1
于 2012-10-27T00:02:41.013 に答える
-1

実際にははるかに簡単です。

(.)\1\1

(.)任意の文字に一致し、それぞれ\1が最初のキャプチャグループによって一致した正確な文字列に一致する後方参照です。実際に何.が一致するかを認識してから、正確なニーズに合うようにグループを(括弧内に)変更する必要があります。

于 2012-10-27T00:01:57.863 に答える