Javascript 正则表达式不起作用
我在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
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干杯。对于大多数其他正则表达式引擎,空字符类是不允许的,这使您能够在字符内部保持]
不可替换