正規表現を使用して検証したい算術式 ((20+30)-25)/5 があります。式には、整数、浮動小数点数、オペランド、および括弧のみを含めることができます。
検証する正規表現を生成するにはどうすればよいですか? JavaScriptを使用してその文字列を検証する他の方法を助けてください。
正規表現を使用して検証したい算術式 ((20+30)-25)/5 があります。式には、整数、浮動小数点数、オペランド、および括弧のみを含めることができます。
検証する正規表現を生成するにはどうすればよいですか? JavaScriptを使用してその文字列を検証する他の方法を助けてください。
コメントで述べたように、これは1つのJavaScript正規表現を使用して不可能です。ただし、ループを使用してそれを行うことができます。部分式をアトムに置き換え、アトムを取得するまで繰り返します。これ以上減らすことができず、残っているものがアトムでない場合、検証されません。これは実際には、評価するために行う手順とほとんど同じです(抽象構文ツリーをスキップするだけです)。あなたは検索し\(\d+\)|\d+[-+/*]\d+
て置き換えることができます0
:
例:
((20+30)-25)/5
((0)-25)/5
(0-25)/5
(0)/5
0/5
0
あなたがマッチに失敗し、ちょうど持っていなかった場合0
、それは失敗です。
(検証ではなく評価するには、ダミーの代用ではなく実際の値に置き換える必要があります。他のすべては同じです)。
括弧の入れ子に最大の深さを課す場合にのみ、正規表現でこれを行うことができます。それ以外の場合、算術式のセットは文脈自由言語を形成しますが、正規言語は形成しません。
正規表現を使用する必要がある場合、私が使用するアプローチは、算術式のセットに対して正規文法を記述し、それを正規表現に変換することです。
もう1つのアプローチは、再帰下降パーサーを作成することです。これは、かなり単純なプロジェクトであり、算術式に対して非常にうまく機能します。