在文本中查找功能

时间:2013-09-19 21:29:30

标签: javascript php jquery html

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

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

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

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

我希望你知道怎么做。 感谢。

4 个答案:

答案 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和接受的答案的组合:)