使用javascript正则表达式制作引用文本

时间:2011-11-07 12:31:07

标签: javascript jquery regex

我希望将>作为前缀的文本行包含在<span class="quoted"></span>中。

这是我的代码:

$(document).ready(function(){
    x = $('DIV#test').html();
    x = x.replace(/(^|\n)&gt;([^\n]+)(\n|$)/g, "$1<span class=\"quoted\">$2</span>$3");
    $('DIV#test').html(x);
});

我找不到原因,但这只会在Chrome和IE中引用奇数行,这会使所有文字变为灰色。任何想法这个代码有什么问题?

在jsFiddle演示:http://jsfiddle.net/jBJ6V/1/

2 个答案:

答案 0 :(得分:3)

在正则表达式上使用m(“multiline”)标志,而不是在开始时使用交替(并对结果捕获组进行必要的调整):

$(document).ready(function(){
    x = $('DIV#test').html();
    x = x.replace(/^&gt;([^\n]+)$/gm, "<span class=\"quoted\">$1</span>");
    // Changes:    ^----here----^      ^--here                ^^--here-^
    $('DIV#test').html(x);
});

Updated fiddle

m标志告诉正则表达式将^$视为相对于各行,而不是相对于整个字符串。详情部分15.10.2.615.10.2.7以及on MDC

答案 1 :(得分:1)

它在IE中不起作用的原因是较旧的IE处理innerHTML的方式不同,这反映在jQuery中有不同的.html()结果。

试试这个jsfiddle:

http://jsfiddle.net/jBJ6V/8/

我通过7,8和9兼容模式运行它,似乎正在运行。