【发布时间】:2011-01-24 01:00:11
【问题描述】:
这里有一个有趣的。任何人都有一个很好的正则表达式来将所有 (first) ^ (second) 转换为 Math.pow((first), (second))?
编辑:
目前为止最好的
s = s.replace(/((?:\d+\.?\d*)|\w+|\((?:(?:[^\(\)]*(?:\([^\(\)]*\)))*)\))\s*\^\s*((?:\d+\.?\d*)|\w+|\((?:(?:[^\(\)]*(?:\([^\(\)]*\)))*)\))/g, 'Math.pow($1, $2)') // replace expression ^ expression with Math.pow($1, $2)
到目前为止的答案还不够笼统。它们不包括 (var1 + var2)^2 之类的东西,更不用说 (var1 * (var2 + var3))^2
解决方案必须使用括号。
您可以使用 strfriend.com 帮助您在创建正则表达式时对其进行可视化。这就是我一直在做的。
【问题讨论】:
-
你现在最接近的是...?
-
a * b ^ c应该转换成什么?a ^ b + c?a ^ b ^ c? -
这不能用普通的正则表达式来完成。它需要任意递归。如果你想要一个答案,我建议你提高赏金,这是一个相当复杂的问题。
-
你需要的是一个词法表达式解析器...
-
已经有一段时间了,但我相信匹配任意括号/引号/字符通常不属于常规语言,因此无法通过正则表达式进行解析。
标签: javascript regex