使用带有正则表达式的javascript替换函数<;span>;及</span>;。。。包罗万象
如何使用正则表达式替换使用带有正则表达式的javascript替换函数<;span>;及</span>;。。。包罗万象,javascript,jquery,html,regex,Javascript,Jquery,Html,Regex,如何使用正则表达式替换,如中所示?(此正则表达式理想地匹配或,包括范围内的所有内容) 我尝试了各种各样的例子,例如: .replace(/</?span>/,"") .replace(/</?span>/g,"") .replace(/[</?span>]/,"") .replace(/[</?span>]/g,"") 。替换(/,“”) .replace(//g,“”) .替换(/[]/,“”) .替换(/[]/g,“”) 在Javasc
,如中所示?(此正则表达式理想地匹配
或
,包括范围内的所有内容)
我尝试了各种各样的例子,例如:
.replace(/</?span>/,"")
.replace(/</?span>/g,"")
.replace(/[</?span>]/,"")
.replace(/[</?span>]/g,"")
。替换(/,“”)
.replace(//g,“”)
.替换(/[]/,“”)
.替换(/[]/g,“”)
在Javascript中,您需要转义/
,因为JS使用/
作为正则表达式分隔符,并添加[^>]*
以匹配中的任何内容:
.replace(/<\/?span[^>]*>/ig, "")
。替换(/]*>/ig,”)
在Javascript中,您需要转义/
,因为JS使用/
作为正则表达式分隔符,并添加[^>]*
以匹配中的任何内容:
.replace(/<\/?span[^>]*>/ig, "")
。替换(/]*>/ig,”)
我看到您在问题中包含了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>
我看到您在问题中包含了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>
.replace(//gi,”)
在*
之后添加?
,使其非贪婪匹配。。替换(//gi,”)
在*
之后添加?
,使其成为非贪婪匹配。代码的问题是正则表达式在第一个/
处结束
.replace(/</?span>/,"")
^--Thinks this is the closing /
。替换(/,“”)
^--我认为这是结束/
它需要逃脱
.replace(/<\/?span>/,"")
^ Use \ to escape it
。替换(/,“”)
^使用\来转义它
但是,为什么要使用正则表达式来删除元素,而嵌套的元素会给您带来问题呢。使用DOM的强大功能,不要依赖正则表达式
函数removeSpans(htmlStr){
var wrapper=document.createElement(“div”);
wrapper.innerHTML=htmlStr;
var span=wrapper.getElementsByTagName(“span”);
while(跨度、长度){
span[0].parentNode.removeChild(span[0]);
}
返回wrapper.innerHTML;
}
var myHTML=“这是一个范围一些文本这是另一个范围”;
var cleanedHTML=removeSpans(myHTML);
document.getElementById(“out”).innerHTML=cleanedHTML代码>
代码的问题是正则表达式在第一个/
.replace(/</?span>/,"")
^--Thinks this is the closing /
。替换(/,“”)
^--我认为这是结束/
它需要逃脱
.replace(/<\/?span>/,"")
^ Use \ to escape it
。替换(/,“”)
^使用\来转义它
但是,为什么要使用正则表达式来删除元素,而嵌套的元素会给您带来问题呢。使用DOM的强大功能,不要依赖正则表达式
函数removeSpans(htmlStr){
var wrapper=document.createElement(“div”);
wrapper.innerHTML=htmlStr;
var span=wrapper.getElementsByTagName(“span”);
while(跨度、长度){
span[0].parentNode.removeChild(span[0]);
}
返回wrapper.innerHTML;
}
var myHTML=“这是一个范围一些文本这是另一个范围”;
var cleanedHTML=removeSpans(myHTML);
document.getElementById(“out”).innerHTML=cleanedHTML代码>
您链接的问题有一个非常合适的答案。@Katana314我同意,假设此人知道如何首先将.match()
与regex一起使用,为什么首先使用regex?HTML是否指定用于该页面?删除节点比搞乱HTML解析更容易、更安全。这里需要注意的是,如果适用,不建议使用正则表达式解析HTML@sln:那肯定行不通。你链接的问题有一个非常合适的答案。@Katana314我同意,假设这个人知道如何首先将.match()
与regex一起使用为什么首先使用regex?HTML是否指定用于该页面?删除节点比搞乱HTML解析更容易、更安全。这里需要注意的是,如果适用,不建议使用正则表达式解析HTML@sln:那肯定不行。需要添加g
switch-too需要添加g
switch-tooat不会有什么不同。@squint-是的,但你不应该告诉他为什么吗?而且,原因是相对的。@sln:他不应该告诉我为什么会有不同吗?这里是的,因为它与[^>]*
匹配。就我个人而言,我保持非贪婪作为一种实践,:]@elaijuh-这是一个棘手的权衡,如果它是开放式的,引擎会扫描最后一个
然后反向工作,如果它不是基于后续子表达式的开放式,它仍然可以以贪婪的方式工作。这不会有什么区别。@squint-是的,但是你不应该告诉他为什么吗?而且,原因是相对的。@sln:他不应该告诉我为什么会有不同吗?这里是的,因为它与[^>]*
匹配。就我个人而言,我将保持非贪婪作为一种实践,:]@elaijuh-这是一个棘手的权衡,如果它是开放式的,那么引擎会扫描最后一个
,如果它不是基于后续子表达式的开放式,则会反向工作,它仍然可能以贪婪的方式行事。感谢您发布正确的方式清理标签。感谢您发布正确的方式清理标签。