Javascriptで電卓をコーディングしています。
[expression1]^[expression2]
:を :に翻訳したいMath.pow([expression1], [expression2])
のような単純な式5^-3
がある場合、正規表現を使用するのは非常に簡単ですが、次のようなより複雑な式がある場合:
(-5*(6+3)-5)^((2*2)-2)+(4*5)
括弧がネストされているため、正規表現で処理する方法がわかりません...
何かアドバイス?ありがとう。
Javascriptで電卓をコーディングしています。
[expression1]^[expression2]
:を :に翻訳したいMath.pow([expression1], [expression2])
のような単純な式5^-3
がある場合、正規表現を使用するのは非常に簡単ですが、次のようなより複雑な式がある場合:
(-5*(6+3)-5)^((2*2)-2)+(4*5)
括弧がネストされているため、正規表現で処理する方法がわかりません...
何かアドバイス?ありがとう。
正規表現パターンを使用します。
/((?:(?=[^()]*\d)\d*(?:\.\d*)?)|(?:\((?:(?:[^()]+)|(?:[^()]*\([^()]*\)[^()]*)+)\)))\^((?:(?=[^()]*\d)\-?\d*(?:\.\d*)?)|(?:\((?:(?:[^()]+)|(?:[^()]*\([^()]*\)[^()]*)+)\)))/
説明:
[ステップ1]::正規表現パターンには、2つのほぼ同じサブパターンが含まれています^
。
((?:(?=[^()]*\d)\d*(?:\.\d*)?)|(?:\((?:(?:[^()]+)|(?:[^()]*\([^()]*\)[^()]*)+)\)))
\^
((?:(?=[^()]*\d)\-?\d*(?:\.\d*)?)|(?:\((?:(?:[^()]+)|(?:[^()]*\([^()]*\)[^()]*)+)\)))
唯一の違いは、2番目(後ろ^
)では単純なパラメーターとして負の数を使用できることです(\-?
)
[ステップ2]::ステップ1のサブパターンには2つの選択肢があります。
(?:(?=[^()]*\d)\-?\d*(?:\.\d*)?)
|
(?:\((?:(?:[^()]+)|(?:[^()]*\([^()]*\)[^()]*)+)\))
[ステップ3]::最初の選択肢は数字です-例:1234
または12.34
または1234.
または.1234
(?=[^()]*\d)
\-?\d*
(?:\.\d*)?
[ステップ4]::2番目の選択肢は、ネストされた括弧式です
\(
(?:(?:[^()]+)|(?:[^()]*\([^()]*\)[^()]*)+)
\)
[ステップ5]::これは単純または複雑である可能性があります(内部に他の括弧があります)
(?:[^()]+)
|
(?:[^()]*\([^()]*\)[^()]*)+
[ステップ6]::複雑で、中に他の括弧がある場合は、ネストされていることを確認します
[^()]*
\(
[^()]*
\)
[^()]*