Javascript 拆分字符串并在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] + '<

我有一个字符串,我正在尝试拆分它,然后用MathML标记进行包装。目标是为一个方程提供一个MathML(可能是MathJax)渲染输出。我遇到的问题是将MathML标记与不同的子字符串相匹配

例如:

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 += "&#x2212;"; 
           break;

        case '*':
           front += "&times;";
           break;

        case '/':
           front += "/";
           break;

        case '±':
           front += "&#x00B1;";
           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 += "&#x2212;"; 
           break;

        case '*':
           front += "&times;";
           break;

        case '/':
           front += "/";
           break;

        case '±':
           front += "&#x00B1;";
           break;

        default:
           return "";
    }

    front += "</mo>";
    return front;
}
string str=x+2
newStr=str.split(“”);
对于(i=0;i
你能给出一个你需要的输入和输出的案例吗?@amosrivera--请看更新后的帖子。你能给出一个你需要的输入和输出的案例吗?@amosrivera--请看更新后的帖子。