Javascript 无法使用正则表达式替换字符串

Javascript 无法使用正则表达式替换字符串,javascript,jquery,replace,Javascript,Jquery,Replace,我在这里玩JSFIDLE: HTML 第1行 第3行 第1行 第2行 第6行 第1行 第2行 Javascript/jQuery $('#wrapper p.body').each(function () { var temp = $(this).innerHTML; this.innerHTML = temp.replace(/(<br>)+/gim, "<br>"); }); $('#wrapper p.body')。每个(函数(){ v

我在这里玩JSFIDLE:

HTML


第1行

第3行

第1行
第2行



第6行

第1行
第2行

Javascript/jQuery

$('#wrapper p.body').each(function () {
    var temp = $(this).innerHTML;
    this.innerHTML = temp.replace(/(<br>)+/gim, "<br>");
});
$('#wrapper p.body')。每个(函数(){
var temp=$(this).innerHTML;
this.innerHTML=temp.replace(/(
)+/gim,“
”); });

我的目标是尝试在出现2个以上的

时将其清除。然而,它似乎无法识别temp。这是JSFIDLE行为,还是我犯了一个明显的错误?

您需要为
innerHTML
属性使用正确的对象。这是一个DOM对象属性,而不是jQuery属性。您可以在DOM元素上使用
innerHTML
DOM属性:

$('p.body').each(function () {
    var temp = this.innerHTML;
    this.innerHTML = temp.replace(/(<br>)+/gim, "<br>");
});
$('p.body')。每个(函数(){
var temp=this.innerHTML;
this.innerHTML=temp.replace(/(
)+/gim,“
”); });
JSFiddle:

或者对jQuery对象使用html()方法:

$('p.body').each(function () {
    var temp = $(this).html();
    this.html(temp.replace(/(<br>)+/gim, "<br>"));
});
$('p.body')。每个(函数(){
var temp=$(this.html();
html(临时替换(/(
)+/gim,“
”); });


请注意,“正确”的换行符是

,而不是

,但我想您不能更改该换行符,因为您需要为
innerHTML
属性使用正确的对象。这是一个DOM对象属性,而不是jQuery属性。您可以在DOM元素上使用
innerHTML
DOM属性:

$('p.body').each(function () {
    var temp = this.innerHTML;
    this.innerHTML = temp.replace(/(<br>)+/gim, "<br>");
});
$('p.body')。每个(函数(){
var temp=this.innerHTML;
this.innerHTML=temp.replace(/(
)+/gim,“
”); });
JSFiddle:

或者对jQuery对象使用html()方法:

$('p.body').each(function () {
    var temp = $(this).html();
    this.html(temp.replace(/(<br>)+/gim, "<br>"));
});
$('p.body')。每个(函数(){
var temp=$(this.html();
html(临时替换(/(
)+/gim,“
”); });


请注意,“正确”的换行符是

,而不是

,但我想您不能更改该换行符,因为您需要为
innerHTML
属性使用正确的对象。这是一个DOM对象属性,而不是jQuery属性。您可以在DOM元素上使用
innerHTML
DOM属性:

$('p.body').each(function () {
    var temp = this.innerHTML;
    this.innerHTML = temp.replace(/(<br>)+/gim, "<br>");
});
$('p.body')。每个(函数(){
var temp=this.innerHTML;
this.innerHTML=temp.replace(/(
)+/gim,“
”); });
JSFiddle:

或者对jQuery对象使用html()方法:

$('p.body').each(function () {
    var temp = $(this).html();
    this.html(temp.replace(/(<br>)+/gim, "<br>"));
});
$('p.body')。每个(函数(){
var temp=$(this.html();
html(临时替换(/(
)+/gim,“
”); });


请注意,“正确”的换行符是

,而不是

,但我想您不能更改该换行符,因为您需要为
innerHTML
属性使用正确的对象。这是一个DOM对象属性,而不是jQuery属性。您可以在DOM元素上使用
innerHTML
DOM属性:

$('p.body').each(function () {
    var temp = this.innerHTML;
    this.innerHTML = temp.replace(/(<br>)+/gim, "<br>");
});
$('p.body')。每个(函数(){
var temp=this.innerHTML;
this.innerHTML=temp.replace(/(
)+/gim,“
”); });
JSFiddle:

或者对jQuery对象使用html()方法:

$('p.body').each(function () {
    var temp = $(this).html();
    this.html(temp.replace(/(<br>)+/gim, "<br>"));
});
$('p.body')。每个(函数(){
var temp=$(this.html();
html(临时替换(/(
)+/gim,“
”); });

请注意,“正确”的换行符是

,而不是

,但我想您无法更改该换行符:

想法是:将有一个中断和一个/多个(一个/多个空格换行+中断)>>替换为一个中断

以下是修改后的代码:

$('p.body').each(function () {
    var elem = $(this)
    var temp = elem.html();
    elem.html(temp.replace(/<br>(\s+<br>)+/img, "<br>"));

});
$('p.body')。每个(函数(){
var elem=$(此)
var temp=elem.html();
元素html(临时替换(/
(\s+
)+//img,“
”); });
如果回答了您的问题,请将其标记为答案

我认为最好在所有情况下都使用jquery。Jquery和原始javascript的混合不是一个好概念。

JSFIDED:

想法是:将有一个中断和一个/多个(一个/多个空格换行+中断)>>替换为一个中断

以下是修改后的代码:

$('p.body').each(function () {
    var elem = $(this)
    var temp = elem.html();
    elem.html(temp.replace(/<br>(\s+<br>)+/img, "<br>"));

});
$('p.body')。每个(函数(){
var elem=$(此)
var temp=elem.html();
元素html(临时替换(/
(\s+
)+//img,“
”); });
如果回答了您的问题,请将其标记为答案

我认为最好在所有情况下都使用jquery。Jquery和原始javascript的混合不是一个好概念。

JSFIDED:

想法是:将有一个中断和一个/多个(一个/多个空格换行+中断)>>替换为一个中断

以下是修改后的代码:

$('p.body').each(function () {
    var elem = $(this)
    var temp = elem.html();
    elem.html(temp.replace(/<br>(\s+<br>)+/img, "<br>"));

});
$('p.body')。每个(函数(){
var elem=$(此)
var temp=elem.html();
元素html(临时替换(/
(\s+
)+//img,“
”); });
如果回答了您的问题,请将其标记为答案

我认为最好在所有情况下都使用jquery。Jquery和原始javascript的混合不是一个好概念。

JSFIDED:

想法是:将有一个中断和一个/多个(一个/多个空格换行+中断)>>替换为一个中断

以下是修改后的代码:

$('p.body').each(function () {
    var elem = $(this)
    var temp = elem.html();
    elem.html(temp.replace(/<br>(\s+<br>)+/img, "<br>"));

});
$('p.body')。每个(函数(){
var elem=$(此)
var temp=elem.html();
元素html(临时替换(/
(\s+
)+//img,“
”); });
如果回答了您的问题,请将其标记为答案

我认为最好在所有情况下都使用jquery。Jquery和原始javascript的混合不是一个好概念。

使用
.html()
而不是
innerHTML

正则表达式模式
/(
\s*)+/
将空格与匹配0个或多个空格字符的
\s*
一起考虑

$('p.body').each(function () {
    var temp = $(this).html();
    $(this).html(temp.replace(/(<br>\s*)+/gim, "<br>"));
});
$('p.body')。每个(函数(){
var temp=$(this.html();
$(this.html(临时替换(/(
\s*)+/gim,“
”)); });
同样如注释所示,用于调试和始终

小提琴:使用
.html()
而不是
innerHTML

正则表达式模式
/(
\s*)+/
考虑了空格,其中