在浏览器中使用此javascript:
var url = window.location.toString();
window.location = url.replace(/.com/, '.com.nyud.net').replace(/.net/, '.net.nyud.net');
导致以.com(以及其他TLD)结尾的网站发生这种情况:
这
website.com/123
到
website.com.nyud.net.nyud.net/123
虽然它适用于以.net结尾的网站:
这
website.net/abc
到
website.net.nyud.net/abc
如何调整它以使其正常工作?
答案 0 :(得分:4)
发生这种情况是因为.net
中的.com.nyud.net
正在被.com.nyud.net
取代。
要解决此问题,请使用一个正则表达式替换所有TLD。
window.location = url.replace(/\.(com|net|org)(?=$|\/|\?)/, '.$1.nyud.net');
我稍微修改了正则表达式,因此它使用反向引用将TLD添加到替换字符串中。它还确保.com
后跟字符串的结尾或/
,因此它与www.company.net
之类的内容不匹配。
更新:已修复以正确替换website.com/123
等网址。
答案 1 :(得分:1)
第一次用.com
替换.com.nyud.net
。然后第二个替换用.net
替换了新的.net.nyud.net
。所以你最终得到了website.com.nyud.net.nyud.net
翻转逻辑,以便在.net
之前替换.com
。
使用
url.replace(/.net/, '.net.nyud.net').replace(/.com/, '.com.nyud.net');
代替。
<强>更新强>
逃避.
,因为它很特别。
url.replace(/\.net/, '.net.nyud.net').replace(/\.com/, '.com.nyud.net');
<强>更新强>
您可能只想在网址末尾替换:
url.replace(/\.net$/, '.net.nyud.net').replace(/\.com$/, '.com.nyud.net');
但这假定没有路径。
答案 2 :(得分:0)
您应该使用正则表达式中的$
来定义您正在替换字符串的结尾而不是字符串的任何部分。
然后格式化主机而不是完整的网址,然后在/
之后添加任何内容。
这样的事情:
var host = window.location.host; // website.com
var restOfUrl = window.location.pathname;
var newHost = host.replace(/\.com$/, '.com.nyud.net').replace(/\.net$/, '.net.nyud.net');
var url = newHost + restOfUrl;