正则表达式查找字符串的一部分和相关值
regex to find part of string and associated value
我有一个看起来像这样的字符串:
const string = 'test_string%name=peter&age=18&foo=bar&lol=loli_copter';
我想编写一个正则表达式来从该字符串及其值中获取 name
和 age
。
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
以及针对 name
和 age
键的正则表达式模式,以及它们的 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=[^&]*
它搜索由除&符号以外的任何字符组成的值,即使是空值也可以。
但是,如果您有可能使用不同的顺序或中间字段,那么您最好通过分隔符(% 和 &)拆分字符串,并分别评估字段名称以找出正确的值。
我有一个看起来像这样的字符串:
const string = 'test_string%name=peter&age=18&foo=bar&lol=loli_copter';
我想编写一个正则表达式来从该字符串及其值中获取 name
和 age
。
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
以及针对 name
和 age
键的正则表达式模式,以及它们的 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=[^&]*
它搜索由除&符号以外的任何字符组成的值,即使是空值也可以。
但是,如果您有可能使用不同的顺序或中间字段,那么您最好通过分隔符(% 和 &)拆分字符串,并分别评估字段名称以找出正确的值。