[英]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.