将方程式字符串拆分为具有系数的符号列表

时间:2013-11-04 12:10:47

标签: regex coffeescript

我希望用户输入如下公式:

"(-6/8) + (2/3)x + (-2/3)bar + (5/8) = (-2) + z + (-5/1245)foo"

然后获取li的无序列表

  <li class='monome #{side}' data-value='-6/8' data-type='rationnal'></li>

  <li class='monome #{side}' data-value='2/3' data-type='symbol' data-symbol='x'></li>

取决于等式中每个成员的术语类型......

一个丑陋的解决方案是:

member_as_html = (membre,side) ->
  html = "<ul>"
  for monome in membre
    m = monome.split(")")
    if m[1]
      html += "<li class='monome #{side}' data-value='#{m[0][1..]}' data-type='symbol' data-symbol='#{m[1]}'></li>"
    else
      html += "<li class='monome #{side}' data-value='#{m[0][1..]}' data-type='rationnel'></li>"
  html += "</ul>"   



s = $( "#equation_string" ).val()
s = s.replace(/\s+/g, '').split("=")
ml = s[0].split("+")
mr = s[1].split("+")
ul_left = member(ml,"left")
ul_right = member(mr,"right")

但是字符串没有验证,符号长度没有任何灵活性

最后是为了激励人们帮助我使用这些正则表达式,这是我工作项目的链接。 您可以使用等式来解决它们:它对于老师来说非常有趣和有用: http://jsfiddle.net/cphY2/

  

EDIT   目前,具有任何括号和运算符优先级ln,exp和factorial的复杂方程对于开发状态来说太复杂了。这就是为什么我选择这个由一系列术语组成的简单等式的约定。一个术语可以是一个合理的或一个符号(任何长度),其中有一个合理的系数。关于用于输入等式的约定的任何(更好的)提议都将受到赞赏(特别是fu#@“@ [| @king regex with!)

1 个答案:

答案 0 :(得分:1)

我不知道coffeescript,但这是一个python解决方案,也许它会让你走上正确的轨道?

s = "(-6/8) + (2/3)x + (-2/3)y + (5/8)"
s = s.split(" + ")
D = []
for u in s:
    if u[-1] == ')': D += [{u,"frac"}]
    else: D += [{u[0:-1],u[-1]}]