如何用正则表达式替换重复序列?

问题描述 投票:0回答:1

例如,如果有 2 个或更多

:0000:
的序列,那么我喜欢将它们替换为 :.

在下面的代码中,结果应该是

2a00:1450:4028:805::00001111:2005
,但它只是忽略了替换,所以我猜它需要先行。

顺便说一句,如果它只是一个

:0000:
那么它应该替换为
:0:
,但是一旦真正的问题得到解决,这应该相当容易。请注意,我故意使用
00001111
以确保它不会被替换。

let str = document.getElementById("input").textContent; 
let res = str.replace(/(:0000:){2,}/g, ":");
document.getElementById("output").textContent = res;
Before:
<p id="input">
2A00:1450:4028:080B:0000:0000:00001111:2005
</p>
After
<p id="output">
</p>

javascript regex-replace positive-lookahead
1个回答
0
投票

问题是您的模式

/(:0000:){2,}
要求每个
0000
::
分隔,而不仅仅是
:
,例如
:0000::0000::0000:
。您应该在组的开头或结尾有
:
,而不是两者都出现。然后你可以匹配量化组之外的另一个
:

如果您想在结果中使用

::
,则应该在替换中使用它,而不仅仅是
:

let str = document.getElementById("input").textContent; 
let res = str.replace(/(:0000){2,}:/g, "::");
document.getElementById("output").textContent = res;
Before:
<p id="input">
2A00:1450:4028:080B:0000:0000:00001111:2005
</p>
After
<p id="output">
</p>

© www.soinside.com 2019 - 2024. All rights reserved.