簡體   English   中英

JavaScript 正則表達式替換多個模式

[英]JavaScript Regex replacing multiple patterns

我需要修改正則表達式,它為我執行以下操作。

更改 IP 列表,列表可以更長或更短。

1.1.1.1,2.2.2.2

到一個字符串,例如:

[{"{#ADDR}":"1.1.1.1"},{"{#ADDR}":" 2.2.2.2"}]

在以下行中:

return '{$PING_LIST}'.replace(/([^,]+)/g,'{"{#ADDR}":"$1"}').replace(/(.*)/,'[$1]')

但我也需要將主機名添加到列表中。

1.1.1.1-NODE1,2.2.2.2-NODE2

得到這樣的東西

[{"{#ADDR}":"1.1.1.1","{#NODE}":"NODE1"},{"{#ADDR}":"2.2.2.2","{#NODE}":"NODE2"}]

我試圖通過這種方式獲取主機名:

(?<=-)(\w+)(?=,)

但我無法找出正確的語法並將其與前面的表達式結合起來。

非常感謝任何幫助!

您想要的結果字符串看起來像一個帶有對象的 Javascript 數組。 如果是這種情況,您可以使用 2 個捕獲組:

\b((?:\d{1,3}\.){3}\d{1,3})-(\w+)

有關捕獲組值,請參閱正則表達式演示

 const s = "1.1.1.1-NODE1,2.2.2.2-NODE2"; const regex = /\b((?:\d{1,3}\.){3}\d{1,3})-(\w+)/g; const m = Array.from(s.matchAll(regex), m => { return { "{#ADDR}": m[1], "{#NODE}": m[2] } }) console.log(m);

使用((?:\d+\.){3}\d+)匹配 IP。

 let pinglist = '1.1.1.1-NODE1,2.2.2.2-NODE2'; let result = pinglist.replace(/((?:\d+\.){3}\d+)-([^,]+)/g, '{"{#ADDR}":"$1","{#NODE}":"$2"}') console.log(result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM