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.