我需要能够去除字符串中的条件,这里是:
(("${Operation}" == "Fixed") && ("-" == "-"))
我希望能够替换"${Operation}" == "Fixed"
为""
() 或其中包含 ${} 的任何内容。换句话说,如果条件左侧有 ${},我想完全摆脱条件。
我需要能够去除字符串中的条件,这里是:
(("${Operation}" == "Fixed") && ("-" == "-"))
我希望能够替换"${Operation}" == "Fixed"
为""
() 或其中包含 ${} 的任何内容。换句话说,如果条件左侧有 ${},我想完全摆脱条件。
这将匹配它
\([^(]*\${.*?}[^)]*\)
一般来说,正则表达式在这里不是正确的方法。有很多情况是有效的 JavaScript 语法,但不能很好地适应正则表达式。但是,这是一种方法:
var code = '(("${Operation}" == "Fixed") && (thing1 == thing2))';
code = code.replace(/"[^"]*\$\{[^}]*\}[^"]*"\s*==\s*"[^"]*"/, 'true');
那只处理双引号。如果你需要处理这两种类型的引号,表达式会更复杂。如果您需要处理这两种类型的引号并且您的字符串可能包含引号,那么正则表达式确实不起作用。
如果你能想出不同的方法来解决这个问题,那么你应该这样做。例如 - 字符串来自哪里?你能得到不同格式的数据吗?
此外,听起来您正在设置此字符串以调用eval
. 如果它包含任何类型的用户输入,那是个坏主意。
使用这个正则表达式/^\(?[^)&]*?\${.*\)/
,我成功匹配了前两行,但没有匹配其他两行。这是你想要的?
(("${Operation}" == "固定") && ("-" == "-"))
("${Operation}" == "固定"))
(("$Operation" == "固定") && ("-" == "-"))
(("-" == "-") && ("${Operation}" == "固定"))
有趣的是,我想出了/\(("?\${.*}"?[^)]*)\)/g
:
'(("${Operation}" == "Fixed") && ("-" == "-"))'.replace(/\(("?\${.*}"?[^)]*)\)/g, '("")')
这可能有太多了*
,但无论如何互联网编码问题似乎总是有点开放。
注意:这就像对特殊 RegExp 字符的测试,很有趣,谢谢!
唯一能让我写的正则表达式沉没的东西就是[^)]*
任何东西都不是结束)