0

我希望用户输入一个等式,例如:

"(-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/

编辑现在,具有任何级别的括号和运算符优先级 ln、exp 和阶乘的复杂方程对于发展状态来说太复杂了。这就是为什么我选择了这个由项和组成的简单方程的约定。项可以是有理数或以有理数为系数的符号(任意长度)。任何(更好的)关于用于输入等式的约定的建议将不胜感激(尤其是 fu#@"@[|@king 正则表达式以及!)

4

1 回答 1

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]}]
于 2013-11-04T12:41:02.173 回答