写了一些代码来帮助Find special markers in sequence and do something to the text in between
这是小提琴:http://jsfiddle.net/mplungjan/GyPHH/
为什么每个正则表达式只运行一次,你将如何处理嵌套的条目
<div id="texts">
**this** **would** make it **bold** __this would__ make it __underlined__
__**how about bold and underlined**__
and
**__the other way around__**
</div>
var res = {
boldIt:/\*\*(.*?)\*\*/g,
underlineIt:/\_\_(.*?)\_\_/g
}
$.each(res, function(type, re) {
var s = $("#texts").html();
var m = re.exec(s);
var found = m[0];
$.each(m, function(index, value) {
if (index==0) return true;
var html = s.replace(found,'<span class="'+type+'" >'+value+'</span>',"g");
$("#texts").html(html);
});
});
答案 0 :(得分:3)
该代码不必要地复杂化。试试这个:
var res = {
boldIt:/\*\*(.*?)\*\*/g,
underlineIt:/\_\_(.*?)\_\_/g
}
$.each(res, function(type, re) {
var txt = $( "#texts" ).html();
$( "#texts" ).html( txt.replace( re, '<span class="'+type+'" >$1</span>' ) );
});
答案 1 :(得分:2)
那是因为你正在替换一遍又一遍找到的第一个值。如果你检查结果,你会发现你已经用多个标签包装了第一个匹配。
您正在进行双循环,首先找到匹配项,然后替换每个匹配项。你可以马上替换它们。此外,当你可以只执行一次时,你将获得html并将其放回每次迭代:
var res = {
boldIt:/\*\*(.*?)\*\*/g,
underlineIt:/\_\_(.*?)\_\_/g
}
var s = $("#texts").html();
$.each(res, function(type, re) {
s = s.replace(re,'<span class="'+type+'" >$1</span>');
});
$("#texts").html(s);