我如何将.replace()
与</?span>
的正则表达式一起使用,如this question中所述? (此正则表达式最理想地匹配<span>
或</span>
,包括范围内的所有内容)
我尝试过各种各样的例子,例如:
.replace(/</?span>/,"")
.replace(/</?span>/g,"")
.replace(/[</?span>]/,"")
.replace(/[</?span>]/g,"")
答案 0 :(得分:3)
在Javascript中,您需要转义/
,因为JS使用/
作为正则表达式分隔符,并添加[^>]*
以匹配span
中的任何内容:
.replace(/<\/?span[^>]*>/ig, "")
答案 1 :(得分:1)
代码问题是正则表达式在第一个/
.replace(/</?span>/,"")
^--Thinks this is the closing /
需要逃脱。
.replace(/<\/?span>/,"")
^ Use \ to escape it
但是,当嵌套元素导致问题时,为什么要使用正则表达式来删除元素。使用DOM的强大功能,不要依赖正则表达式。
function removeSpans(htmlStr) {
var wrapper = document.createElement("div");
wrapper.innerHTML = htmlStr;
var spans = wrapper.getElementsByTagName("span");
while(spans.length) {
spans[0].parentNode.removeChild(spans[0]);
}
return wrapper.innerHTML;
}
var myHTML = "<span>This is a span</span> Some text <span>This is another span</span>";
var cleanedHTML = removeSpans(myHTML);
document.getElementById("out").innerHTML = cleanedHTML;
<div id="out"></div>
使用jQuery:
function removeSpans(htmlStr) {
var wrapper = $("<div/>").html(htmlStr);
wrapper.find("span").remove();
return wrapper.html();
}
答案 2 :(得分:0)
我看到您在问题中包含jQuery
标记,因此我假设您可以使用jQuery。您可以使用jQuery来解决此问题。
$('span').each(function(){
$(this).replaceWith($(this).text());
});
这将查找每个span
元素,此元素可以是以下任何一个:
<span>test</span>
<span class="has-a-class" id="also-an-id">a span with any number of attributes</span>
并将其替换为span
中的文本,基本上剥离了HTML标记及其属性:
test
a span with any number of attributes
答案 3 :(得分:0)
.replace(/<\/?span.*?>/gi, "")
在?
之后添加*
以使其与非贪婪匹配。