【问题标题】:Spot vars and functions with regex in mathematical formulas在数学公式中使用正则表达式发现变量和函数
【发布时间】:2015-04-22 16:02:57
【问题描述】:

我正在尝试在 vanilla JS:

一个样本:

1+3*9/cos(4+2*x/6+pol)+
BDLIRE(longueur2)+2*8+sin(2)
+g()

为了获取我使用的功能:/([a-zA-Z]+)(?=[(])/gm https://regex101.com/r/fT3iM7/1

为了获得我试过的变量:/([a-zA-Z]+[a-zA-Z0-9]?)(?!\()/gm https://regex101.com/r/mG2fQ2/1

但正如您所见,它忽略了匹配的最后一个字符,后跟一个 ( 字符 所以我有点坚持我的正则表达式来匹配变量。

感谢您的帮助:)

【问题讨论】:

    标签: regex parsing math


    【解决方案1】:

    你不能使用 RegEx 来解析算术表达式,也许你可以,但是你会有一个不稳定的实现,写它会让你发疯。

    您需要研究解析器。查看 PEG.js,它是一个易于使用的框架,用于编写可编译为 JS 的解析器,因此它是“香草”(无论您是什么意思...):

    http://pegjs.org/

    【讨论】:

    • 谢谢,我很期待,我的教导是,我有一个字符串数学运算,如果我得到函数和变量,我可以有一个包含所有变量和函数的范围,并使用类似的东西评估,或者我还不知道。
    • 我用的是coffeescript,它是一个动态表单,所以尝试一下-catch 似乎是一个不错的计划。
    • 我将尝试使用 eval 解决方案完成一个原型,至于正则表达式问题,我将得到 ([a-zA-Z][a-zA-Z0-9]*[(]?) 所以变量和函数将它们与 indexOf('(') 分开形成一个计算器表格,所以使用 PEG.js 可能会过大,如果不是很清楚,我会试试这个库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多