拆分字符串并将子字符串包装在mathml标记中
split a string and wrap substrings in mathml tags
我有一个字符串,我试图将其拆分,然后用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>')
但这只适用于单个MathML标记。我如何将每个子字符串映射到一个标签,用该标签包装它(最好是用变量来指代标签),然后也关闭标签(在使用像<msup>
这样的多元素MathML时发挥作用)。
更新
例如,这就是我试图生产的:
输入:x + 2
输出:<mi>x</mi><mo>+</mo><mn>2</mn>
我一整天都在和这个问题作斗争。有什么想法吗?
像MathJax和jqMath这样的库可以为您处理数字、变量、运算符、嵌套圆括号、指数、矩阵等。MathJax支持用于复杂格式的LaTeX语法,其中jqMath只实现了一种更简单的基于unicode的语法。例如,在jqMath中,可以执行M.sToMathE('x + 2')
来创建MathML元素。(如果你真的想要字符串形式的话,我相信你可以使用它的innerHTML。)另请参阅Jqmath-在页面加载后应用。(完整披露:我写了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;
}
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 如何将字符串值从php页面发送到java脚本页面
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 对id以某个字符串开头的元素进行计数
- Javascript逻辑运算符和字符串/数字
- 反向字符串比较
- 如何有效地将游戏数据存储在URL查询字符串中
- 可变大小的JavaScript字符串如何成为基元类型
- 将DOM节点值与字符串Javascript进行比较
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 本地存储中的字符串到字节数组转换
- JavaScript按钮/输入/函数,字符串反转
- 从查询字符串参数推断出正确的数据类型
- 如何在WebView中为Javascript在Android中转义MathML字符串
- 拆分字符串并将子字符串包装在mathml标记中