我希望用户输入如下公式:
"(-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!)
答案 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]}]