我试图想出一个Javascript正则表达式的命令,将这些输入转换成以下输出的一部分:的Javascript正则表达式替换有条件地去除串
INPUT DESIRED OUTPUT
mydomain.com --> mydomain.com
foo.mydomain.com --> mydomain.com
dev.mydomain.com --> dev.mydomain.com
dev-foo.mydomain.com --> dev.mydomain.com
这里的规则:
- 从域中删除子域,除非该子域以字符“dev的”
- 开始。如果子域与“dev的”开始,然后输出“dev.domain.com”
- 保留在域末尾指定的任何端口
我的正则表达式技巧让我失望。这是我到目前为止:
'mydomain.com'.replace(/^(dev)?(-.*)?(mydomain.com)/,'$1.$3');
// .mydomain.com
'foo.mydomain.com'.replace(/^(dev)?(-.*)?(mydomain.com)/,'$1.$3');
// foo.mydomain.com
'dev-foo.mydomain.com'.replace(/^(dev)?(-.*)?(mydomain.com)/,'$1.$3');
// dev.mydomain.com
'dev.mydomain.com'.replace(/^(dev)?(-.*)?(mydomain.com)/,'$1.$3');
// dev.mydomain.com
前两个失败和最后两个工作。有什么建议么?
这是JavaScript的工作原理,但我希望将它合并成一个正则表达式替换命令。请注意,我也想保留在dmain末尾指定的任何端口。
var getHost = function() {
var host = window.location.host;
if (host.substring(0,3) === 'dev') {
return host.replace(/^(dev)?(-.*)?(mydomain\.com.*)/,'$1.$3');
}
else {
return 'mydomain.com';
}
}
你能解释一下这里应该适用的一般规则吗?根据您的示例输入/输出,人们可能会认为您正在寻找一种方法来删除连字符,句点和单词foo,当它们出现在第一个句点之前时。那是你要的吗? – jahroy 2013-02-26 02:07:04
你能解释一下你想让你的正则表达式工作吗?所以它需要一个形式为'mydomain.com'或'(something).mydomain.com'的字符串,并且应该总是返回'mydomain.com',*除非*'(something)'包含单词'dev',否则哪种情况应该是'dev.mydomain.com'?或者你只是想删除任何'foo'的发生? – 2013-02-26 02:07:22
@jahroy我已经更新了使用规则的问题。也许你可以撤销downvote? – Tauren 2013-02-26 02:25:42