0

我正在为学生重新设计一个数学课程。原始程序是用 adobe flash 编写的。这次我用 PHP 和 JavaScript 来做。

在原始程序中有几个 XML 文件,其中包含数百个数学问题,其中一些是分数。这些分数写为:#(1,4)。我想制作一个#可以制作经典分数的函数。

问题:#(1,3) 周围有正常文本,并且没有用引号分隔。如何让浏览器知道文本中有函数?例子:

  <question>what is #(2,8) divided by #(3,4)</question>

我希望你知道如何做到这一点。谢谢。

4

4 回答 4

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");

现在是

"<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 ) 看起来会更好。

于 2013-09-19T21:38:05.673 回答
0

正则表达式!

^#\([\d]+,[\d]+\)$

这将匹配任何以#([*number(s)*],[*number(s)*])

您可以让 PHP 执行此操作并根据需要进行格式化。

于 2013-09-19T21:37:59.167 回答
0

你可以在 PHP 中解析文本,使用preg_replace(). 这是它如何工作的示例:

preg_replace( "/#\((\d+),(\d+)\)/" , "$1/$2" , $question );

您想编写一个循环来从 xml 中获取每个问题并在其上运行这行代码。

这将采取这样的一行:

#(2,8) 除以 #(3,4) 是什么

给你这个:

2/8除以3/4等于多少

您可以修改此代码并在PHP Sandbox中查看它的工作情况。

于 2013-09-19T21:38:26.940 回答
0

正如您所指出的......已经有一个链接可以处理您的部分问题。

如何在 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 和接受的答案:)

于 2013-09-19T21:40:35.890 回答