Javascript RegEx替换有条件地删除字符串的一部分
Javascript RegEx replace to conditionally remove part of a string
我试图想出一个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工作,但我希望把它合并成一个单一的regex替换命令。请注意,我还希望保留域末尾指定的任何端口。
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/
下面是分解:它要么匹配dev
某些 .
,要么匹配任何。如果匹配"dev",则$1
包含"dev",$2
包含"。"。如果它不匹配包含"dev"的模式,$1
和$2
将为空。($3
在任何情况下都将包含"mydomain.com")
所以这是可能的,但它是复杂的
我的建议是做一些比这更具可读性和可维护性的东西。在我看来,计算这一行所花费的时间和痛苦是不值得节省一两行代码长度的。
你可以使用一个函数来修改值,在JS中有更多的控制权。
var value = "dev-foo.mydomain.com".replace(/^(dev)?[^'.]+'./, function (match, p1) {
return p1 ? p1 + '.' : '';
});
很难知道你在要求什么…
但是…根据您的示例输入/输出,您可以执行以下操作:
- 分割第一个周期的输入。
- 如果第一部分包含"dev",则将其替换为"dev"。
- 如果第一部分NOT包含dev这个词,删除它。
不需要正则表达式,如果实际上是你想要的:
function trimInput(s) {
var n = s.indexOf('.');
if (n === -1) {
return s;
}
var head = s.substring(0, n);
if (head.indexOf("dev") !== -1) {
return "dev." + s.substring(n);
}
else {
return s.substring(n);
}
}
如果不是想要你想要的,请更新你的问题,指定你想要的
相关文章:
- 如何检查字符串的一部分与数组匹配
- 将字符串的一部分设置为数组的一部分
- 用数字单位替换字符串的一部分
- 移除字符串(如果找到)移除JS中字符串的一部分
- 如何获得字符串的一部分
- 作为onclick确认的一部分,Razor中的字符串属性
- 用HTML元素替换字符串的一部分
- 如何知道找到的单词是字符串的一部分还是JavaScript中的函数调用
- j如何从给定字符串的一部分替换字符串
- 如何使用RegExp选择字符串的一部分并在变量中重用它
- 返回javascript中regex字符串的一部分
- JQuery获取字符串的一部分
- JavaScript Regexp仅匹配字符串的一部分
- 如何在数组jQuery中查找字符串的一部分
- 撇号标记在javascript字符串中与Backslash一起发送,该字符串使用ajax作为json对象的一部分发送到p
- JavaScript:将字符串的一部分放入DOM容器中,保存溢出
- 将字符串的一部分转换为DataTables的JSON
- 如何在javascript数组中剥离字符串的一部分
- 如何获取在Javascript正则表达式中用正斜杠分隔的字符串的一部分
- 如果两个值都会动态变化,则用变量替换某个字符串的一部分 - Javascript