正则表达式不起作用

时间:2012-12-09 16:07:34

标签: javascript regex expression

我在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

有时我的正则表达式有效,它会正确替换文本,有时不会 - 有错吗?谢谢你的帮助!

亚历

4 个答案:

答案 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);

Here you have it.

答案 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