我正在为学生重新设计一个数学课程。原始程序是用adobe flash编写的。这次我是用PHP和JavaScript做的。
在原始程序中,有几个XML文件包含数百个数学问题,其中一些是分数。这些分数写成:#(1,4)。我想创建一个名为#
的函数,它可以创建经典分数。
问题:#(1,3)周围有正常文本,并且没有用引号分隔。如何让浏览器知道文本中有功能? 例如:
<question>what is #(2,8) divided by #(3,4)</question>
我希望你知道怎么做。 感谢。
答案 0 :(得分:1)
没有更详细的信息:
var s = "<question>what is #(2,8) divided by #(3,4)</question>";
var t = s.replace(/(^|\s|>)#\((\d+),(\d+)\)($|\s|<)/g, "$1<span class='fraction'><span class='numerator'>$2</span><span class='denominator'>$3</span></span>$4");
t现在是
"<question>what is <span class='fraction'><span class='numerator'>2</span><span class='denominator'>8</span></span> divided by <span class='fraction'><span class='numerator'>3</span><span class='denominator'>4</span></span></question>"
所以:正则表达式,你找到#(...,...),其中...
是数字,“函数”字符串被白色空格包围,句子的开头/结尾或尖括号。
但是,将其重写为MathJax MathML或LaTeX格式(http://mathjax.org)将会更好看。
答案 1 :(得分:0)
正则表达式!
^#\([\d]+,[\d]+\)$
这将匹配以#([*number(s)*],[*number(s)*])
您可以让PHP执行此操作,然后根据需要进行格式化。
答案 2 :(得分:0)
您可以使用preg_replace()
在PHP中解析文本。以下是它可能如何工作的示例:
preg_replace( "/#\((\d+),(\d+)\)/" , "$1/$2" , $question );
你想编写一个循环来从xml中获取每个问题并在其上运行这行代码。
这将采取如下行:
#(2,8)除以#(3,4)
并告诉你:
什么是2/8除以3/4
您可以修改此代码,并在PHP Sandbox。
中查看它答案 3 :(得分:0)
正如你所指出的......已经存在一个链接处理你问题的一部分。
How to display "Classic" built-up fractions with an horizontal line in CSS / JavaScript?
我在链接的jsfiddle周围工作以满足您的需求:
http://jsfiddle.net/xW7d8/156/
唯一的变化在于javascript,将#(1,2)更改为1/2。然后现有的脚本完成了这项工作。
$('.fraction').each(function(key, value) {
$this = $(this) ;
var s = $this.text() ;
var n = s.replace(/#\((\d+),(\d+)\)/g, "$1/$2") ;
var split = n.split("/")
if( split.length == 2 ){
$this.html('<span class="top">'+split[0]+'</span><span class="bottom">'+split[1]+'</span>')
}
});
- 编辑 -
但是,不考虑从<question> String </question>
到<span ...> String </span>
的更改。您可以使用jsfiddle和接受的答案的组合:)