0

我在 Javascript 中使用以下正则表达式:

    comment_body_content = comment_body_content.replace(/(<span id="sc_start_commenttext-(\d+)"><\/span>)
[^]*?(<span id="sc_end_commenttext-\2"><\/span>)/, "$1$3");

我想在我的 HTML 代码中找到这个标签<span id="sc_start_commenttext-330"></span>(数字总是不同的)和标签<span id="sc_end_commenttext-330"></span>. 然后这些标签之间的文本和 HTML 代码应该被删除,其余的应该返回:

前:

<span id="sc_start_commenttext-330"></span>
Some Text and some <u>html</u> blabla
<span id="sc_end_commenttext-330"></span>

comment_body_content 的返回值:

<span id="sc_start_commenttext-330"></span>
<span id="sc_end_commenttext-330"></span>

此表达式适用于所有当前浏览器,但 IE 8 在 "(\d+)" 和 \2 所在的行处返回 javascript 错误。

是否有适用于所有浏览器的解决方案?

亚历克斯

4

3 回答 3

3

这将起作用。

.replace(/(<span id="sc_start_commenttext-(\d+)"><\/span>)[\S\s.]*?(<span id="sc_end_commenttext-\2"><\/span>)/, "$1$3")

http://jsfiddle.net/4Rx96/5/

于 2013-04-26T08:40:33.883 回答
2

只需更改[^]*?您的正则表达式.*?

为了处理你会使用的换行符:[\s\S]*?

于 2013-04-26T11:32:05.960 回答
0

不建议使用正则表达式处理 HTML。

这可能更有用 - 我正在使用 jQuery

如有必要,我们有办法找到开始和结束,但您提供的 HTML 将通过以下方式处理:

演示

var comments = {}
$("span[id^='sc_start_commenttext-']").each(function() {
   var idx = this.id.split("-")[1];    
   comments[idx]=$(this).get(0).nextSibling.nodeValue;
});
window.console && console.log(comments["330"])
于 2013-04-26T09:01:21.427 回答