Home > database >  JavaScript Regex replacing multiple patterns
JavaScript Regex replacing multiple patterns

Time:09-15

I need to modify the regex, which does the following for me.

Changes the IP list, the list can be longer or shorter.

1.1.1.1,2.2.2.2

to a string such as:

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

in the following line:

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

But I need to add the hostname to the list as well.

1.1.1.1-NODE1,2.2.2.2-NODE2

and get something like this

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

I tried to get the hostname, this way:

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

but I can't figure out the correct syntax and combine it with the previous expression.

Very grateful for any help!

CodePudding user response:

Your desired result string looks like a Javascript array with objects. If that is the case, you can use 2 capture groups:

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

See a regex demo for the capture group values.

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);

CodePudding user response:

Use ((?:\d \.){3}\d ) to match the 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);

  • Related