在javascript中,使用保留顺序的方法拆分字符串

在javascript中,使用保留顺序的方法拆分字符串,javascript,Javascript,在javascript中,如何拆分上述字符串(“hosts”)字符串,如下所示: hosts=".uk.com:hostname:@10.10.10.10/10:@[2001:db8:1/64]:@11.11.11.11/11:@[::2/24]" 我试过这个: newhosts=.uk.com,hostname,@10.10.10.10/10,@[2001:db8:1/64],@11.11.11.11/11,@[::2/24]" 实际产量: var hosts, newhosts; var

在javascript中,如何拆分上述字符串(“hosts”)字符串,如下所示:

hosts=".uk.com:hostname:@10.10.10.10/10:@[2001:db8:1/64]:@11.11.11.11/11:@[::2/24]"
我试过这个:

newhosts=.uk.com,hostname,@10.10.10.10/10,@[2001:db8:1/64],@11.11.11.11/11,@[::2/24]"
实际产量:

var hosts, newhosts;
var ip6_hosts = [];
var ip6_re = /@\[(.*?)\]/g;

hosts=".uk.com:hostname:@10.10.10.10/10:@[2001:db8:1/64]:@11.11.11.11/11:@[::2/24]";
while ((match=ip6_re.exec(hosts)) != null)
    ip6_hosts.push(match[0]);
non_ip6_hosts=hosts.replace(ip6_re, '').replace(/:+/g, ':');
newhosts=ip6_hosts.concat(non_ip6_hosts.split(':'));
预期产出:

newhosts=@[2001:db8:1/64],@[::2/24],.uk.com,hostname,@10.10.10.10/10,@11.11.11.11/11
但不知道如何维持秩序。有什么方法可以达到预期的产出吗?

你不能说:

newhosts=.uk.com,hostname,@10.10.10.10/10,@[2001:db8:1/64],@11.11.11.11/11,@[::2/24]
你什么时候想换?
我觉得这是一个太简单的答案,如果我没有得到它,请发表评论。

以下内容应该有用:

host = host.replace(/:+/, ',');
你能试试这个吗

hosts.replace(/([^:]{1})\:{1}([^:]{1})/g, '$1,$2')
}

hosts=“.uk.com:hostname:@10.10.10/10:@[2001:db8:1/64]:@11.11.11/11:@[::2/24]”

hosts=hosts.split(“:@”).join(“,@”)

变量re=/:\w/g; var found=hosts.match(re)

hosts.replaceAt(find.index,,)

您可以尝试:

String.prototype.replaceAt=function(index, character) {
return this.substr(0, index) + character + this.substr(index+character.length);
var openbracket=0;
对于(i=0;i试试这个

var hosts='.uk.com:hostname:@10.10.10/10:@[2001:db8:1/64]:@11.11.11/11:@[::2/24];
hosts=hosts.replace(/:@/g,,:@');
hosts=hosts.split(':@');
var hostDetails=hosts[0]。拆分(“:”);
var newHost=hostDetails.concat(hosts.splice(1,hosts.length));

console.log(newHost)
这也是我对它的解释。这不也是用两个逗号替换结尾处的双科林吗?他的示例显示,这两个逗号不应该被替换?@aaronfrost非常正确。很抱歉,这也不起作用,因为您不希望括号中的科林被替换为逗号。让我再试一次。这不起作用这和大多数其他答案一样。它们很接近,但不完全是你想要的。这很接近。用户想要的目标也应该替换“com”和“hostname”之间的colin。根据问题,它们应该变成“com,hostname”。这很接近。你也可以在一行代码中完成,所以我喜欢这个。hosts=“.uk.com:hostname:@10.10.10/10:@[2001:db8:1/64]:@11.11.11/11:@[::2/24]“哦,是的……我错过了……这应该会给出预期的输出。hosts=hosts.split(':@')。join(',@');var re=/:\w/;var match=hosts.match(re);hosts.replaceAt(match.index),”);这很接近,但不包括订单更改的情况。例如,如果字符串“hostname”位于末尾,则不会生成预期的输出。
    var openbracket=0;
    for (i=0; i<hosts.length; i++)
    {
    if (hosts.substr(i,1) == '[') openbracket=openbracket+1;
    if (hosts.substr(i,1) == ']') openbracket=openbracket-1;
            if ((hosts.substr(i,1) == ':') && openbracket==0)
            {
            hosts = hosts.substr(0,i) + ',' + hosts.substr(i+1,hosts.length-i-1);
            }
    }