文字列内の条件を取り除くことができる必要があります。これは次のとおりです。
(("${Operation}" == "Fixed") && ("-" == "-"))
"${Operation}" == "Fixed"
$ {}が含まれている()と、""
またはその間の何かに置き換えられるようにしたいと思います。つまり、条件の左側に$ {}がある場合は、条件を完全に削除したいと思います。
文字列内の条件を取り除くことができる必要があります。これは次のとおりです。
(("${Operation}" == "Fixed") && ("-" == "-"))
"${Operation}" == "Fixed"
$ {}が含まれている()と、""
またはその間の何かに置き換えられるようにしたいと思います。つまり、条件の左側に$ {}がある場合は、条件を完全に削除したいと思います。
これはそれに一致します
\([^(]*\${.*?}[^)]*\)
一般に、ここでは正規表現は適切なアプローチではありません。有効なJavaScript構文である場合はたくさんありますが、それは正規表現にうまく適合しません。ただし、これを行う1つの方法があります。
var code = '(("${Operation}" == "Fixed") && (thing1 == thing2))';
code = code.replace(/"[^"]*\$\{[^}]*\}[^"]*"\s*==\s*"[^"]*"/, 'true');
二重引用符のみを処理します。両方のタイプの引用符を処理する必要がある場合、式はより複雑になります。両方のタイプの引用符を処理する必要があり、文字列に引用符が含まれている可能性がある場合、正規表現は実際には機能しません。
この問題を解決する別の方法を考えることができるなら、そうすべきです。たとえば、文字列はどこから来たのですか?別の形式でデータを取得できますか?
また、への呼び出し用にこの文字列を設定しているようですeval
。何らかのユーザー入力が含まれている場合、これは悪い考えです。
この正規表現/^\(?[^)&]*?\${.*\)/
を使用して、最初の2行は正常に一致しましたが、他の2行は一致しませんでした。これはあなたが探しているものですか?
(( "$ {Operation}" == "Fixed")&&( "-" == "-"))
("$ {Operation}" == "Fixed"))
(( "$ Operation" == "Fixed")&&( "-" == "-"))
(( "-" == "-")&&( "$ {Operation}" == "Fixed"))
興味深いことに、私は思いついた/\(("?\${.*}"?[^)]*)\)/g
:
'(("${Operation}" == "Fixed") && ("-" == "-"))'.replace(/\(("?\${.*}"?[^)]*)\)/g, '("")')
これはおそらく多すぎます*
が、インターネットコーディングの質問はとにかく少し広く開かれているようです。
注:これは、特別な正規表現キャラクターのテストのようなものでした。ありがとうございます。
そして、私が書いた正規表現の沈没船を維持している唯一のもの[^)]*
は、終わりではないものです)