正则表达式查找字符串的一部分和相关值

regex to find part of string and associated value

我有一个看起来像这样的字符串:

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

我想编写一个正则表达式来从该字符串及其值中获取 nameage

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

我尝试了以下但没有成功:

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

任何人都可以帮助我或指出正确的方向吗?

您可以只匹配“除 & 以外的任何字符”作为姓名,“任意位数”作为年龄。例如

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

我们可以在这里使用字符串 match 以及针对 nameage 键的正则表达式模式,以及它们的 RHS 值。

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

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)

输出: peter 18

如果您的字段始终按此顺序排列(因此 name 始终直接在 age 之前,中间没有任何内容,顺序始终相同),你可以使用这个更简单的正则表达式:

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

它搜索由除&符号以外的任何字符组成的值,即使是空值也可以。

但是,如果您有可能使用不同的顺序或中间字段,那么您最好通过分隔符(% 和 &)拆分字符串,并分别评估字段名称以找出正确的值。