2017-02-22 14 views
-3

テスト文字列:abc{123正規表現の特殊文字 '{' JSでの試合ではなく、Javaの

正規表現:\w+{\d+

これはJSに一致しますが、私はJavaでそれをそれに合わせしようとすると、私は、このエラーを与える:インデックス2 \w+{\d+

近く

違法繰り返し

それは私がこのような{文字エスケープする場合にのみ、Javaで動作します。

希望の解像度ult: JSで一致する場合は、Javaでも一致する必要があります。

JavaとJSの正規表現の実装の違いは何ですか? JavaとJSで同じように動作させるにはどうすればいいですか?

答えて

0

{をエスケープするだけです。 Javascriptがこのケースでちょうどより寛容..です

\w+\{\d+ 

あなたの最初の正規表現は有効ではありません..しかし{は、それが意味するので、あなたが正規表現でエスケープしたい文字のいずれかです。だから、正規表現は次のようになります。あなたは特殊文字をエスケープする必要があるとバックスラッシュは、特別な文字であるため、あなたはエスケープする必要があり[a-z]{22}はAZから22個のシーケンシャル文字に一致します。..

0

:特定の文字(複数可)のようなので、を繰り返す回数それだけでなく。正規表現はjava:\\w+\\{\\d+のようになります。問題がある場合は、お気軽にお問い合わせください。いくつかのプログラミング言語でコードを生成することができます:https://regex101.com/r/D4yz40/1この例はあなたの文字列にマッチします。

It works in Java only when I escape the { character like this: \w+\{\d+ ".

なぜ:あなたは、あなたはすでに答えを知っているJavaとJS

1

How can I make it behave in the same way in Java and in JS?

のためのコードを生成することができますか?ここのJavaScriptはもう少し許されているからです。 JavaScriptの\w{3"f{3"と一致しますが、"f77"では一致しません。 \w{3}"f77"と一致しますが、"f{3}"と一致しません。つまり、同じ文字の{は、文字列の後のどこかで、}が表示されるかどうかに基づいて意味が変更されます。したがって、その動作はその許容性によって予測できなくなります.Javaは正規表現をあまりにも不愉快に書くことを許可しません。

+0

私の質問はなぜJSがあなたが卑劣なことを許すので、私が言ったところで、 '{' in JS – Manoj

+0

をエスケープする必要はありませんでした。なぜそれが作られたのかという問題が「あなたはJSがあなたに不合理なことを許可するのはなぜですか?なぜオレンジではなくリンゴをはがす必要がありますか?オレンジやりんごはどうやってあるのか、それぞれユニークな味わいでお楽しみください。 – Amadan

+0

しかし、なぜそれが** [**。 JSはそれにマッチしません。 – Manoj

関連する問題