Home > Mobile >  regex to find part of string and associated value
regex to find part of string and associated value

Time:04-15

I have a string that looks like this:

const string = 'test_string%name=peter&age=18&foo=bar&lol=loli_copter';

I want to write a regex to get name and the age from this string and their values.

const result = 'name=peter&age=18;

I have tried the following but with no luck:

const result = string.match(/(?<=name\s ).*?(?=\s age)/gs);

Can anyone help or point me in the right direction?

CodePudding user response:

We can use string match here along with a regex pattern which targets the name and age keys, along with their RHS values.

var string = 'test_string%name=peter&age=18&foo=bar&lol=loli_copter';
var parts = string.match(/\b(?:name|age)=[^&] /g);
var output = parts.join('&');
console.log(output);

CodePudding user response:

You could just match "any characters except &" for name and "any number of digits" for age. e.g.

name=([^&] )&age=(\d )

const string = 'test_string%name=peter&age=18&foo=bar&lol=loli_copter';
const data = string.match(/name=([^&] )&age=(\d )/);

console.log(data[1], data[2]) // peter 18

CodePudding user response:

const string = 'test_string%name=peter&age=18&foo=bar&lol=loli_copter';
const name = string.match(/name=([^&]*)/)[1];
const age = string.match(/age=([^&]*)/)[1];

console.log(name, age)

Output: peter 18

CodePudding user response:

If your fields are always in this order (so name is always directly before age, nothing ever between, order always the same), you can use this much simpler regex:

name=[^&]*&age=[^&]*

it searches for values consisting of any characters except the ampersand, even empty values would be OK.

But if you have the possibility of different order or intermediate fields, then you better split the string by the delimiters (% and &) and evaluate the field names individually to find out the right values.

  • Related