我有以下文字:
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解决问题,但我想了解问题所在(我正在接管其他人编写的代码)。
如果我从正则表达式中删除[^@]
,它会显示所有内容。如果我将[^@]
替换为[^}]
,除非我在文本中有}
,否则它会正常工作。
如何防止这种情况发生?
答案 0 :(得分:1)
.replace(/%%%[^@]*/," ")
正在寻找%%%
后跟0个或更多不是@
的字符。给定字符串"Title %%% info@mydomain.com"
- 这意味着它找到%%% info
(因为信息后面有一个@符号),然后用空格(," "
)替换。制作字符串"Title @mydomain.com"
。
如果您只想要"Title "
.replace(/%%%.*/,' ')
因为这会在3%符号后找到任何字符(.
)0次或更多次。但这会留下Title
之后的空格 - 为了纠正这个问题,我们将使用下面的表达式来获得完全修剪的回报:
修正表达
.replace(/\s*%%%.*/,'')