我想我在某个地方缺少一条线路,或者需要更换一条线路。我尝试了各种/ g方法,但我认为exec在这里杀了我,也许我错过了一些小的简单添加,或者也许我写的方式有缺陷。看到很多线程,其中一个提到循环exec,但似乎无限循环因为我在替换中包括匹配。
这是我到目前为止的代码
var system_url="http://somesite.com/";
$('.words').mouseover(function(){
var re=new RegExp("[A-Z][A-Z][A-Z]-[0-9]{5}");
var m=re.exec($(this).html());
if (m == null) {
re=new RegExp("[0-9]{5}");
m=re.exec($(this).html());
if (m == null) {}else{
if ($(this).html().match("</a>")) {}else{
tx=$(this).html().replace(m,"<a href='"+system_url+m+"' target='_blank' title='Ticket: "+m+"'>"+m+"</a>");
$(this).html(tx);
}
}
}else{
if ($(this).html().match("</a>")) {}else{
tx=$(this).html().replace(m,"<a href='"+system_url+m+"' target='_blank' title='Ticket: "+m+"'>"+m+"</a>");
$(this).html(tx);
}
}
});
一些HTML类:
<span class='words'>The quick brown ZAD-14034 jumped over the EAD-14534</span>
<span class='words'>The 13034 brown fox jumped over the ZEN-12274</span>
答案 0 :(得分:2)
您将正则表达式文字定义为/expr/flags
。 RegExp
构造函数用作new RegExp("expr", "flags")
。因此,在您的情况下,用法将是:
new RegExp("[0-9]{5}", "g");
与此同时,你没有利用构造函数而不是文字,所以尝试使用这种语法:
re = /[0-9]{5}/g;
参考:
<强>更新强>
尝试修复代码:
var system_url = "http://somesite.com/";
$(".words").on("mouseover", function () {
var $this = $(this);
if (!$this.hasClass("replaced")) {
var currentContent = $this.text();
var re = /([A-Z]{3}-[0-9]{5})/g;
var newContent = currentContent.replace(re, "<a href='" + system_url + "$1' target='_blank' title='Ticket $1'>$1</a>");
$this.html(newContent);
$this.addClass("replaced");
}
});