2

正規表現を使用して検証したい算術式 ((20+30)-25)/5 があります。式には、整数、浮動小数点数、オペランド、および括弧のみを含めることができます。

検証する正規表現を生成するにはどうすればよいですか? JavaScriptを使用してその文字列を検証する他の方法を助けてください。

4

3 に答える 3

3

コメントで述べたように、これは1つのJavaScript正規表現を使用して不可能です。ただし、ループを使用してそれを行うことができます。部分式をアトムに置き換え、アトムを取得するまで繰り返します。これ以上減らすことができず、残っているものがアトムでない場合、検証されません。これは実際には、評価するために行う手順とほとんど同じです(抽象構文ツリーをスキップするだけです)。あなたは検索し\(\d+\)|\d+[-+/*]\d+て置き換えることができます0

例:

  • ((20+30)-25)/5
  • ((0)-25)/5
  • (0-25)/5
  • (0)/5
  • 0/5
  • 0
  • 終わり

あなたがマッチに失敗し、ちょうど持っていなかった場合0、それは失敗です。

(検証ではなく評価するには、ダミーの代用ではなく実際の値に置き換える必要があります。他のすべては同じです)。

于 2012-12-12T06:12:40.920 に答える
0

括弧の入れ子に最大の深さを課す場合にのみ、正規表現でこれを行うことができます。それ以外の場合、算術式のセットは文脈自由言語を形成しますが、正規言語は形成しません。

正規表現を使用する必要がある場合、私が使用するアプローチは、算術式のセットに対して正規文法を記述し、それを正規表現に変換することです。

もう1つのアプローチは、再帰下降パーサーを作成することです。これは、かなり単純なプロジェクトであり、算術式に対して非常にうまく機能します。

于 2012-12-12T06:14:12.587 に答える