Javascript - 如何使这个正则表达式代码全局化?

时间:2013-05-08 19:12:56

标签: javascript regex

我想我在某个地方缺少一条线路,或者需要更换一条线路。我尝试了各种/ 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>

1 个答案:

答案 0 :(得分:2)

您将正则表达式文字定义为/expr/flagsRegExp构造函数用作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");
    }
});

DEMO: http://jsfiddle.net/5bJ5N/1/