我在Javascript中使用以下正则表达式:
comment_body_content = comment_body_content.replace(
/(<span id="sc_start_commenttext-.*<\/span>)((.|\s)*)(<span id="sc_end_commenttext-.*<\/span>)/,
"$1$4"
);
我想在我的HTML代码中找到此标记<span id="sc_start_commenttext-330"></span>
(数字始终不同)和标记<span id="sc_end_commenttext-330"></span>
。然后应该删除这些标签之间的文本和HTML代码并返回。
替换前的示例:
Some text and code
<span id="sc_start_commenttext-330"></span>Some text and code<span id="sc_end_commenttext-330"></span>
Some Text and code
更换后的示例:
Some text and code
<span id="sc_start_commenttext-330"></span><span id="sc_end_commenttext-330"></span>
Some text and code
有时我的正则表达式有效,它会正确替换文本,有时不会 - 有错吗?谢谢你的帮助!
亚历
答案 0 :(得分:2)
您应该使用与开头及其对应结尾匹配的模式,例如:
/(<span id="sc_start_commenttext-(\d+)"><\/span>)[^]*?(<span id="sc_end_commenttext-\2"><\/span>)/
结尾标记中的\2
引用匹配的(\d+)
字符串,该字符串与开始标记中的数字330
匹配。 [^]
是任何字符的简单表达式。
答案 1 :(得分:1)
使用DOM。
var $spans = document.getElementsByTagName("span");
var str = "";
for(var i = 0, $span, $sibling; i < $spans.length; ++i) {
$span = $spans[i];
if(/^sc_start_commenttext/i.test($span.id)) {
while($sibling = $span.nextSibling) {
if(/^sc_end_commenttext/i.test($sibling.id)) {
break;
}
str += $sibling.data;
$span.parentNode.removeChild($sibling);
}
}
}
console.log("The enclosed string was: ", str);
答案 2 :(得分:0)
如果我理解你的意图,我会开始用.*
替换[0-9]+">
。
答案 3 :(得分:0)
我同意使用regexp来解析html是一个很糟糕的因素,但它可以有效地用于非嵌套的html
使用RegExp:
var str = 'First text and code<span id="sc_start_commenttext-330"></span>Remove text<span id="sc_end_commenttext-330"></span>Last Text and code';
var re = /(.*<span id="sc_start_commenttext-\d+"><\/span>).*(<span id="sc_end_commenttext-\d+"><\/span>.*)/;
str.replace(re, "$1$2");
结果:
First text and code<span id="sc_start_commenttext-330"></span><span id="sc_end_commenttext-330"></span>Last Text and code