RegEx for a ^ b而不是pow(a,b)

5 javascript regex

这是一个有趣的.任何人都有一个很好的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

  • 马蒂亚斯就在这里; 如果你有一个像parens这样的嵌套结构的语言,那么常规语言就不会削减它 - 事实上,它在'常规语言'的定义中.最好开始编写解析器,或者找到其中的一个解析器. (3认同)