替换正则表达式中的@符号

时间:2013-08-21 00:53:08

标签: javascript regex

我有以下文字:

Title %%% info@mydomain.com

我有以下脚本:

update: function(){
    this.AjaxImage(this.mainImage.current);
    // /[$-/:-?{-~!"^_`\[\]]/ Updated 05.22.10, changed .replace(/%%%[^%]*/,' ') to .replace(/%%%.*/,' ') because an escaped space (%20) was causing markup to appear on the page. DE 
    // only show the title and year below the image, %%% is the delimiter
    var caption = this.detailBin[this.mainImage.current]
                      .innerHTML.replace(/%%%.*/,' '); 
    this.overlayCaption('hide');
    this.controls.counter.update(this.mainImage.current+1);
    this.utilities.updateHash(this.mainImage.current+1);
    this.captionUnderlay.update(caption);

    // show everything under "more info"
    this.captionText = this.detailBin[this.mainImage.current]
                           .innerHTML.replace('%%%',' '); 
    this.hasMoreInfo = (this.captionText.length > caption.length+9) ? true : false;
    if(!this.hasMoreInfo) 
        this.controls.captionToggle.hide();
    else 
        this.controls.captionToggle.show();
}

this.captionUnderlay.update(this.detailBin[this.currentImage]
                                .innerHTML.replace(/%%%[^@]*/," "));

上面的captionUnderlay将显示@mydomain.com

我可以使用下面的kludge解决问题,但我想了解问题所在(我正在接管其他人编写的代码)。

如果我从正则表达式中删除[^@],它会显示所有内容。如果我将[^@]替换为[^}],除非我在文本中有},否则它会正常工作。

如何防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

.replace(/%%%[^@]*/," ")

正在寻找%%%后跟0个或更多不是@的字符。给定字符串"Title %%% info@mydomain.com" - 这意味着它找到%%% info(因为信息后面有一个@符号),然后用空格(," ")替换。制作字符串"Title @mydomain.com"

如果您只想要"Title "

,代码顶部的表达式实际上是正确的
.replace(/%%%.*/,' ')

因为这会在3%符号后找到任何字符(.)0次或更多次。但这会留下Title之后的空格 - 为了纠正这个问题,我们将使用下面的表达式来获得完全修剪的回报:

修正表达

.replace(/\s*%%%.*/,'')