gpt4 book ai didi

Javascript RegEx 替换以有条件地删除字符串的一部分

转载 作者:行者123 更新时间:2023-12-01 15:54:13 26 4
gpt4 key购买 nike

我正在尝试提出一个 Javascript RegEx 命令,它将这些输入转换为以下输出:

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';
}
}

最佳答案

只是为了表明可以在单个正则表达式中执行以下操作:

'string'.replace(/(?:(^dev).*(\.)|^.*)(mydomain\.com)/, '$1$2$3');

工作示例:http://jsfiddle.net/gz2tX/

分割如下:它要么匹配 devsomething.,要么匹配 anything。如果它匹配包含“dev”的模式,$1 将包含“dev”,$2 将包含“.”。如果它不匹配包含“dev”的模式,$1$2 将为空。 (在任何一种情况下,$3 都将包含“mydomain.com”。)

所以这是可能的,但它很复杂。

我的建议是做一些比这更具可读性和可维护性的事情。在我看来,花在弄清楚这一行上的时间和痛苦不值得节省一两行代码长度。

关于Javascript RegEx 替换以有条件地删除字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15080102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com