0

在浏览器中使用此 javascript 时:

var url = window.location.toString();
window.location = url.replace(/.com/, '.com.nyud.net').replace(/.net/, '.net.nyud.net');

导致这种情况发生在以 .com 结尾的网站(以及包括其他 TLD 时):

网站.com/123

website.com.nyud.net.nyud.net/123

虽然它适用于以 .net 结尾的网站:

网站.net/abc

网站.net.nyud.net/abc

如何调整它以使其正常工作?

4

3 回答 3

4

发生这种情况是因为.netin.com.nyud.net被替换为.com.nyud.net.

要解决此问题,请使用一个正则表达式替换所有 TLD。

window.location = url.replace(/\.(com|net|org)(?=$|\/|\?)/, '.$1.nyud.net');

我稍微修改了正则表达式,以便它使用反向引用将 TLD 添加到替换字符串中。它还确保 the.com后跟字符串的结尾或 a /,因此它与 . 之类的内容不匹配www.company.net

更新:固定以website.com/123正确替换 URL。

于 2013-02-05T21:45:47.937 回答
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');

更新: 您可能只想在 urls: 末尾替换: url.replace(/\.net$/, '.net.nyud.net').replace(/\.com$/, '.com.nyud.net'); 但这假定没有路径。

于 2013-02-05T21:43:42.823 回答
0

您可能应该$在您的正则表达式中使用 来定义您要替换字符串的结尾而不是字符串的任何部分。

然后格式化主机而不是完整的 url 并在/之后添加任何内容。

像这样的东西:

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;
于 2013-02-05T21:46:20.853 回答