Javascript 拆分字符串并在mathml标记中换行子字符串
我有一个字符串,我正在尝试拆分它,然后用MathML标记进行包装。目标是为一个方程提供一个MathML(可能是MathJax)渲染输出。我遇到的问题是将MathML标记与不同的子字符串相匹配 例如:Javascript 拆分字符串并在mathml标记中换行子字符串,javascript,arrays,split,mathml,Javascript,Arrays,Split,Mathml,我有一个字符串,我正在尝试拆分它,然后用MathML标记进行包装。目标是为一个方程提供一个MathML(可能是MathJax)渲染输出。我遇到的问题是将MathML标记与不同的子字符串相匹配 例如: str = x + 2; newStr = str.split(''); //returns [x,+,2] 我可以像这样在数组中循环: for (i = 0;i < newStr.length; i++) { write('<mn>' + newStr[i] + '<
str = x + 2;
newStr = str.split(''); //returns [x,+,2]
我可以像这样在数组中循环:
for (i = 0;i < newStr.length; i++) {
write('<mn>' + newStr[i] + '</mn>')
for(i=0;i
但这只适用于单个MathML标记。如何将每个子字符串映射到一个标记,用该标记将其包装(最好是以变量的形式引用该标记),然后关闭该标记(在使用多元素MathML时,如
)
更新
例如,这就是我试图制作的:
输入:x+2
输出:x+2
我整天都在与这个问题作斗争。有什么想法吗?库喜欢并为您这样做,处理数字、变量、运算符、嵌套括号、指数、矩阵等。MathJax支持复杂格式的LaTeX语法,其中jqMath只实现了一个更简单的基于unicode的语法。例如,在jqMath中,您可以执行
使用('x+2')
创建一个MathML元素。(如果您真的想要字符串形式的话,我相信您可以使用它的innerHTML。)另请参见。(完全公开:我编写了jqMath。)库喜欢并为您这样做,处理数字、变量、运算符、嵌套括号、指数、矩阵等。MathJax支持复杂格式的LaTeX语法,其中jqMath只实现了一种更简单的基于unicode的语法。例如,在jqMath中,您可以执行M.stomate('x+2')
来创建MathML元素。(如果您真的想要字符串形式的话,那么您可以使用它的innerHTML。)另请参见。(完整披露:我编写了jqMath。)这里是一个起点,展示了如何将这种转换为MathML。另外,请注意,它更像是伪代码而不是javascript
string str = x + 2
newStr = str.split('');
for (i = 0;i < newStr.length; i++)
{
string value = Operator_AsMathML(newStr[i]);
if(value == "")
{
if(isdigit(newStr[i][0])
value = Number_AsMathML(newStr[i]);
else
value = Variable_AsMathML(newStr[i]);
}
write(value);
}
string Number_AsMathML(string number)
{
return "<mn>" + number + "</mn>";
}
string Variable_AsMathML(string varname)
{
return "<mi>" + varname + "</mi>";
}
string Operator_AsMathML(string opname) const
{
string front = "<mo>";
switch(opname[0])
{
case '+':
front += "+";
break;
case '-':
front += "−";
break;
case '*':
front += "×";
break;
case '/':
front += "/";
break;
case '±':
front += "±";
break;
default:
return "";
}
front += "</mo>";
return front;
}
string str=x+2
newStr=str.split(“”);
对于(i=0;i
这里是一个起点,展示了如何将这种转换为MathML。还要注意的是,它更多的是伪代码,而不是javascript
string str = x + 2
newStr = str.split('');
for (i = 0;i < newStr.length; i++)
{
string value = Operator_AsMathML(newStr[i]);
if(value == "")
{
if(isdigit(newStr[i][0])
value = Number_AsMathML(newStr[i]);
else
value = Variable_AsMathML(newStr[i]);
}
write(value);
}
string Number_AsMathML(string number)
{
return "<mn>" + number + "</mn>";
}
string Variable_AsMathML(string varname)
{
return "<mi>" + varname + "</mi>";
}
string Operator_AsMathML(string opname) const
{
string front = "<mo>";
switch(opname[0])
{
case '+':
front += "+";
break;
case '-':
front += "−";
break;
case '*':
front += "×";
break;
case '/':
front += "/";
break;
case '±':
front += "±";
break;
default:
return "";
}
front += "</mo>";
return front;
}
string str=x+2
newStr=str.split(“”);
对于(i=0;i
你能给出一个你需要的输入和输出的案例吗?@amosrivera--请看更新后的帖子。你能给出一个你需要的输入和输出的案例吗?@amosrivera--请看更新后的帖子。