难以使用javascript替换函数与正则表达式的<span>和</span> ...全包

时间:2014-12-22 18:48:17

标签: javascript jquery html regex

我如何将.replace()</?span>的正则表达式一起使用,如this question中所述? (此正则表达式最理想地匹配<span></span>,包括范围内的所有内容)

我尝试过各种各样的例子,例如:

.replace(/</?span>/,"")

.replace(/</?span>/g,"")

.replace(/[</?span>]/,"")

.replace(/[</?span>]/g,"")

4 个答案:

答案 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, "")

?之后添加*以使其与非贪婪匹配。