Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式不起作用_Javascript_Regex_Expression - Fatal编程技术网

Javascript 正则表达式不起作用

Javascript 正则表达式不起作用,javascript,regex,expression,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" ); comment\u body\u content=comment\u body\u c

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

comment_body_content = comment_body_content.replace(
  /(<span id="sc_start_commenttext-.*<\/span>)((.|\s)*)(<span id="sc_end_commenttext-.*<\/span>)/,
  "$1$4"
);
comment\u body\u content=comment\u body\u content.replace(

/(如果我正确理解你的意图,我会开始用
[0-9]+“>
替换
*

如果我正确理解你的意图,我会开始用
[0-9]+“>
替换

你应该使用一个匹配开头和相应结尾的模式,例如:

/(<span id="sc_start_commenttext-(\d+)"><\/span>)[^]*?(<span id="sc_end_commenttext-\2"><\/span>)/
/()[^]*?()/

此处,结束标记中的
\2
指的是与开始标记中的数字
330
相匹配的
(\d+)
匹配字符串。
[^]
是任何字符的简单表达式。

您应该使用一个匹配开始和相应结束的模式,例如:

/(<span id="sc_start_commenttext-(\d+)"><\/span>)[^]*?(<span id="sc_end_commenttext-\2"><\/span>)/
/()[^]*?()/
此处,结束标记中的
\2
指的是匹配的
(\d+)
字符串,该字符串与开始标记中的数字
330
匹配。
[^]
是任何字符的简单表达式。

使用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);
​var$span=document.getElementsByTagName(“span”);
var str=“”;
对于(变量i=0,$span,$sibling;i<$spans.length;++i){
$span=$spans[i];
if(/^sc\u start\u commenttext/i.test($span.id)){
而($sibling=$span.nextSibling){
if(/^sc\u end\u commenttext/i.test($sibling.id)){
打破
}
str+=$sibling.data;
$span.parentNode.removeChild($sibling);
}
}
}
log(“包含的字符串是:”,str);
使用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);
​var$span=document.getElementsByTagName(“span”);
var str=“”;
对于(变量i=0,$span,$sibling;i<$spans.length;++i){
$span=$spans[i];
if(/^sc\u start\u commenttext/i.test($span.id)){
而($sibling=$span.nextSibling){
if(/^sc\u end\u commenttext/i.test($sibling.id)){
打破
}
str+=$sibling.data;
$span.parentNode.removeChild($sibling);
}
}
}
log(“包含的字符串是:”,str);

我同意使用regexp解析html通常是不好的ide,但它可以有效地用于非嵌套html

使用RegExp:

var str='第一个文本和代码删除文本最后一个文本和代码';

var re=/(.*)。*(.*)/;

str.replace(re,“$1$2”);


结果:


第一个文本和代码最后一个文本和代码

我同意使用regexp解析html通常是不好的ide,但它可以有效地用于非嵌套html

使用RegExp:

var str='第一个文本和代码删除文本最后一个文本和代码';

var re=/(.*)。*(.*)/;

str.replace(re,“$1$2”);


结果:



第一个文本和代码最后一个文本和代码

为什么在使用JavaScript时使用JavaScript?JavaScript可以说是最容易进行DOM操作的语言。这些
跨度
没有任何内容?你是对的,但html是由cms生成的,因此不容易更改(不是有效代码),所以我决定这样做…是的,跨度是空的,它们只是一些“标记”我觉得@m.buettner的评论不够有力,所以我要重复一次:为什么在使用JavaScript时要使用它?可以说,JavaScript是最容易进行DOM操作的语言。这些
跨度
没有内容?你是对的,但html是由cms生成的,因此不容易更改方式(不是valide代码),所以我决定这样做…是的,跨度是空的,它们只是一些“标记”,我觉得@m.buettner的评论的上一票不够强烈,所以我将重复它:
[^]
…这真的有效吗?我认为大多数引擎,如果里面没有字符,就不会将
]
作为结束括号,从而引发编译错误。“任何字符”通常与
[\s\s]匹配
Wow,它似乎在Chrome中也能工作。JavaScript,你永远不会停止让我惊讶。@m.buettner来自ECMAScript 5规范:“生产字符类:
[
^
类范围
]
通过计算类范围来获得一个字符集,并返回该字符集和布尔值true。”(15.10.2.13)和“生产类范围::[empty]通过返回空字符集进行计算。”(15.10.2.14)@Gumbo cheers。对于大多数其他正则表达式引擎,不允许使用空字符类,这使您可以在字符类中保留
]
不替换字符(如果它是第一个字符)。(我刚刚用PCRE、.NET和Java测试了这一点)…很高兴知道JavaScript有这种怪癖,因为它也是唯一一个没有
dotall
选项的主要引擎。Gumbo,我刚刚在IE 8中发现了一个代码错误。这是我当前的代码:
comment\u body\u content.replace(/()[^]*?()/,“$1$3”)
IE8似乎与\2有问题-现在整个JS都不在那里工作了…你知道如何解决这个问题吗?非常感谢!!
[^]
…这真的有效吗?我认为大多数引擎,如果里面没有字符,不会将
]
作为结束括号,从而引发编译错误。“任何字符”通常与
[\s\s]
匹配哇,它似乎在Chrome中也能工作。JavaScript,你永远不会停止让我惊讶。@m.buettner来自ECMAScript 5规范:“生产字符类::
^
类范围
]
通过计算类范围以获得一个字符集并返回该字符集和布尔值true来进行计算。”(15.10.2.13)和“生产类范围::[empty]通过返回空字符集进行计算。”(15.10.2.14)@Gumbo干杯。对于大多数其他正则表达式引擎,空字符类是不允许的,这使您能够在字符内部保持
]
不可替换