这是一个有趣的.任何人都有一个很好的RegEx将所有(第一个)^(第二个)转换为Math.pow((第一个),(第二个))?
编辑:
我到目前为止最好的是
s = s.replace(/((?:\d+\.?\d*)|\w+|\((?:(?:[^\(\)]*(?:\([^\(\)]*\)))*)\))\s*\^\s*((?:\d+\.?\d*)|\w+|\((?:(?:[^\(\)]*(?:\([^\(\)]*\)))*)\))/g, 'Math.pow($1, $2)') // replace expression ^ expression with Math.pow($1, $2)
Run Code Online (Sandbox Code Playgroud)
到目前为止,答案还不够全面.它们不包括像(var1 + var2)^ 2这样的东西(var1*(var2 + var3))^ 2
解决方案必须使用括号.
您可以使用strfriend.com来帮助您在制作时正确显示正则表达式.这就是我一直在做的事情.
mat*_*zek 11
这不能用正则表达式完成(至少不需要很多努力).您必须考虑括号的不同层,无法使用简单的正则表达式处理.我建议寻找一个能够解析数学表达式的库.或者您必须将可能的表达式限制为可以使用简单的正则表达式处理的内容.
可以在正则表达式中定义命名和平衡捕获组,可以在同一正则表达式中使用(反向引用).有了这个,你必须定义数学语法的所需子集和两个参数的捕获.我建议你不要重新发明轮子并使用JS库.
http://snippets.dzone.com/posts/show/2207