提前致谢。
我正在使用
$(document).ready(function() {
$("body").html(
$("body").html().replace(/®/gi, '<sup>®</sup>').replace(/®/gi, '<sup>®</sup>')
);
});
在regmarks 周围添加一个下标,但是如果® 标记已经有 标签,它会添加两次上标。如果它已经存在,谁能帮我添加一个停止检查?
更新::
我最终使用了这段代码,因为下面的答案干扰了我其余的 javascript。
$(document).ready(function() {
$("p,h1,h2,h3,h4, td").each(function(){
$(this).html($(this).html().replace(/®/gi, '<sup>®</sup>').replace(/®/gi, '<sup>®
</sup>').replace('<sup><sup>', '<sup>').replace('</sup></sup>', '</sup>'));
});
});
你想要这个:
$("body").html(
$("body").html()
.replace(/((?!<sup>\s*))®((?!\s*<\/sup>))/gi, '<sup>®</sup>') // wrap ® if not wrapped yet
.replace(/((?!<sup>\s*))®((?!\s*<\/sup>))/gi, '<sup>®</sup>') // wrap ® if not wrapped yet
);
解释:
您可以在正则表达式本身中为包装标签构建测试,而不是按照其他人的建议并在事后删除重复项。
例如,此正则表达式仅在未被 SUP
包围时查找字符(实体)标签:
/((?!<sup>\s*))®((?!\s*<\/sup>))/gi
和
/((?!<sup>\s*))®((?!\s*<\/sup>))/gi
JsFiddle 演示:http://jsfiddle.net/co3sy5zo/
可运行代码段:(使用原生 javascript 而不是 jQuery)
document.body.innerHTML =
document.body.innerHTML
.replace(/((?!<sup>\s*))®((?!\s*<\/sup>))/gi, '<sup>®</sup>')
.replace(/((?!<sup>\s*))®((?!\s*<\/sup>))/gi, '<sup>®</sup>');
<sup>®</sup>
®
<sup>®</sup>
®
<sup> ® </sup>
<sup> ® </sup>
<sup>
®
</sup>
<sup> ®
</sup>
"Buy more Emo® Jeans!"