我四处寻找答案,但我找不到任何适用于我想要实现的目标。
我有一个页面,其网址使用预标签编写,我使用以下内容自动将任意网址替换为相应的可点击链接:
(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'代替另一行代码?
谢谢。
答案 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'...");
如果你以后开始添加更多东西,这真的会变得混乱。