我希望用户输入一个等式,例如:
"(-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 正则表达式以及!)