4

私の質問はタイトル通りです。2つの構文が異なる場合は、asp.netの正規表現をjavascriptに変換する方法。

誰の答えにも本当に感謝しています。

編集:私はこのような電子メールアドレスをテストするための正規表現を持っています:

"((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))"

.netでは正常に動作します。しかし、正規表現をエミュレートしてjavascriptで使用すると、次のようになります。

new RegeExp(regex).test(email);

構文エラーがスローされます。

SyntaxError: Invalid regular expression

では、JavaScriptでそのひどい正規表現をどのように使用できますか?

4

4 に答える 4

2

彼らは違う。JavaScriptでどのように実行されるかをテストするには、次のようにします。

Regex.IsMatch("input", "regex", RegexOptions.ECMAScript)

.NETでは、ほぼ同等になります。可能であれば、コードを実行してください。これは、それらが同じように機能しているかどうかを判断するのに役立ちます。

JavaScriptのRegEx実装での記述とテストには、 http: //regexpal.com/を強くお勧めします。これはブラウザで100%実行され、リアルタイムでハイライト表示されます。

于 2012-09-20T05:22:44.277 に答える
1

構文の違いは別として、.NETにはあるものとJavaScriptにはないものがたくさんあります。

  • アサーションの後ろを見る
  • Unicodeプロパティのサポート(これは、などの短縮文字クラス\w、単語境界\bなどにも影響します)
  • 再帰的な正規表現
  • 前方参照
  • アトミックグループ化
  • 条件文
  • POSIX文字クラス
  • 名前付きキャプチャグループ
  • DOTALLオプション
  • 複数行の正規表現
  • ここに見られる他の多くの小さな詳細

したがって、.NET正規表現がこれらの機能のいずれかを使用している場合は、それらを大幅に作り直す必要があります。そうしないと、(後読みと再帰の場合)JavaScriptに変換できません。

編集:

あなたの正規表現の場合、主に構文の変更が必要なようです(私が正規表現を使用するタスク。結果の正規表現は次のとおりです。

var myregexp = /((([a-z]|\d|[!#$%&'*+\-\/=?\^_`{|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#$%&'*+\-\/=?\^_`{|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))/;

このモンスターが何をしているのかわからないので、期待どおりにすべてに一致するかどうかをテストする必要があります。

于 2012-09-20T06:20:38.060 に答える
1

JavascriptはXRegExpを使用し、.NETはMicrosoftを使用します。彼らは違う。

XRegExpの機能は少ないようです。

ウィキペディアには比較表がありますhttp://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines

于 2012-09-20T05:21:34.603 に答える
0

正規表現はほとんど同じですが、使用法の構文はプログラミング言語によって異なる場合があります。

RegExBuddyは、RegExを記述し、一般的なプログラミング言語のほとんどで使用法を取得するための優れたツールです。

于 2012-09-20T05:14:31.460 に答える