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

Replace words with links when different links contain the same word

本文关键字:链接 单词 替换 包含相 单词时      更新时间:2023-09-26

我四处寻找答案,但我找不到任何适合我想要达到的目标的东西。

我有一个页面的URL写在一个前置标签,我使用以下命令自动替换任何URL与相应的可点击链接:

(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放在card1之前,就会打乱gcards的链接。

我四处看了看,发现了这个,但我似乎根本无法让代码工作。

是否有任何方法可以使代码仅替换'cards.php',而将'gcards.php'单独用于另一行代码?
谢谢你。

我发现词边界伪字符'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)

最好的解决方案是知道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>')); 

我不知道是否有一个好的正则表达式方法,但如果你不能保证在你的匹配之前的字符,那么作弊将首先用占位符替换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'...");