当不同的链接包含相同的单词时,用链接替换单词

时间:2015-05-28 18:36:59

标签: javascript jquery regex

我四处寻找答案,但我找不到任何适用于我想要实现的目标。

我有一个页面,其网址使用预标签编写,我使用以下内容自动将任意网址替换为相应的可点击链接:

(function($) {
    $(window).load(function() {
        var tpage = $("pre");
        tpage.html(tpage.html().replace(/box.php/ig, '<a target="_blank" href="/box.php">box.php</a>')); 
        tpage.html(tpage.html().replace(/sms.php/ig, '<a target="_blank" href="/sms.php">sms.php</a>')); 
    });
})(jQuery)

这完全没问题。但是,我有两个页面是cards.php和gcards.php。使用上面的cards.php代码也匹配'gcards.php'中的'cards.php',因此,没有建立gcards.php链接。如果我把gcards线放在卡片之前,它就会弄乱gcards链接。

我环顾四周找到了this,但我似乎无法让代码完全正常工作。

有没有什么方法可以让代码只替换'cards.php',只留下'gcards.php'代替另一行代码?
谢谢。

3 个答案:

答案 0 :(得分:5)

我发现边界伪字符\b这个词最有用。例如:

/\bcards\.php\b/ig

这将涵盖空格,字符串的结尾/开头,标点符号等。

<强>更新

您还可以使用变量稍微干掉代码,如下所示:

(function($) {
  $(window).load(function() {
    var tpage = $("pre");
    tpage.html(tpage.html().replace(
      /\b(box|sms|cards)\.php\b/ig, 
      '<a target="_blank" href="/$&">$&</a>')); 
  });
})(jQuery)

答案 1 :(得分:1)

最好的解决方案是知道在card.php,box.php等之前应该是什么...所以你可以将它添加到正则表达式:例如引号?

然而,这个正则表达式应该做的工作:

[^a-zA-Z]card\.php

例如,如果在页面名称之前有引号,则会更简单:

... .replace(/"card\.php/ig, ...)

您的其他正则表达式中存在错误,因为该点未被转义。因此,字符串“boxzphp”或“setmphp”将匹配。 固定代码:

tpage.html(tpage.html().replace(/box\.php/ig, '<a target="_blank" href="/box.php">box.php</a>')); 
tpage.html(tpage.html().replace(/sms\.php/ig, '<a target="_blank" href="/sms.php">sms.php</a>')); 

答案 2 :(得分:1)

我不知道是否有正确的正则表达方式,但如果你不能在比赛前保证这个角色,那么作弊就是取代gcards首先使用占位符,然后替换cards,然后替换占位符:

var result = input.replace(/gcards.php/ig, "MYPLACEHOLDER")
    .replace(/cards.php/ig, "<a href='cards.php'...")
    .replace(/MYPLACEHOLDER/g, "<a href='gcards.php'...");

如果你以后开始添加更多东西,这真的会变得混乱。