在Javascript中使用正则表达式返回URL参数值
在寻找返回url参数值的方法时,我遇到了以下代码 参考: 我设法用这段代码实现了我想做的事情,但是我不理解它。我试着在各种regex实用程序网站上打孔,但是 不走运。我也不明白“函数(a、键、值)”这一部分。请解释此代码如何返回url参数值⚠️ 您的问题的答案如下,但请注意,2019年您可能不应该使用此代码。请参阅我答案的结尾,以获得更好的解决方案。⚠️ 很好地演示了此正则表达式将匹配什么: 在英语中,您可以这样读:在Javascript中使用正则表达式返回URL参数值,javascript,regex,url,parameters,Javascript,Regex,Url,Parameters,在寻找返回url参数值的方法时,我遇到了以下代码 参考: 我设法用这段代码实现了我想做的事情,但是我不理解它。我试着在各种regex实用程序网站上打孔,但是 不走运。我也不明白“函数(a、键、值)”这一部分。请解释此代码如何返回url参数值⚠️ 您的问题的答案如下,但请注意,2019年您可能不应该使用此代码。请参阅我答案的结尾,以获得更好的解决方案。⚠️ 很好地演示了此正则表达式将匹配什么: 在英语中,您可以这样读: 一个或多个?或&字符,后跟 第1组:一个或多个不是=或&的字符,后跟 一个=
?
或&
字符,后跟=
或&
的字符,后跟=
,后跟&
replace
的回调函数(function(a,key,value){…
),让我们询问MDN:
您可以指定一个函数作为第二个参数。在这种情况下,将在执行匹配后调用该函数。函数的结果(返回值)将用作替换字符串…请注意,如果第一个参数中的正则表达式是全局的,则对于要替换的每个完整匹配,将多次调用该函数
函数的参数如下所示:
–匹配的子字符串匹配
–括号中的捕获组找到的第n个字符串,前提是p1,p2,…
的第一个参数是replace()
对象RegExp
p1
,或代码中的key
)包含由组1捕获的字符串,第三个参数(p2
/value
)包含由组2捕获的字符串
您发现的代码实际上使用了replace
来消除其副作用:这是一种非常简单的方法,可以迭代字符串中的所有匹配项
更好的方法 正如您链接到的博客文章中所述,如果您针对的是当前浏览器,那么您应该使用手动解析查询字符串,而不是手动解析查询字符串,这正是出于此目的:
constquery='?foo=1&bar=2';
const searchParams=新的URLSearchParams(查询);
//获取特定参数
const foo=searchParams.get('foo');
log('got foo:',foo);
//迭代所有参数
searchParams.forEach((val,key)=>console.log(key'is',val));
⚠️ 下面是您问题的答案,但请注意,2019年您可能不应该使用此代码。有关更好的解决方案,请参阅我答案的末尾。⚠️
很好地演示了此正则表达式将匹配什么:
在英语中,您可以这样读:
?
或&
字符,后跟=
或&
的字符,后跟=
,后跟&
replace
的回调函数(function(a,key,value){…
),让我们询问MDN:
您可以指定一个函数作为第二个参数。在这种情况下,将在执行匹配后调用该函数。函数的结果(返回值)将用作替换字符串…请注意,如果第一个参数中的正则表达式是全局的,则对于要替换的每个完整匹配,将多次调用该函数
函数的参数如下所示:
–匹配的子字符串匹配
–括号中的捕获组找到的第n个字符串,前提是p1,p2,…
的第一个参数是replace()
对象RegExp
p1
,或代码中的key
)包含由组1捕获的字符串,第三个参数(p2
/value
)包含由组2捕获的字符串
您发现的代码实际上使用了replace
来消除其副作用:这是一种非常简单的方法,可以迭代字符串中的所有匹配项
更好的方法 正如您链接到的博客文章中所述,如果您针对的是当前浏览器,那么您应该使用手动解析查询字符串,而不是手动解析查询字符串,这正是出于此目的:
constquery='?foo=1&bar=2';
const searchParams=新的URLSearchParams(查询);
//获取特定参数
const foo=searchParams.get('foo');
log('got foo:',foo);
//迭代所有参数
searchParams.forEach((val,key)=>console.log(key,'is',val));
你看了这个吗?嗨,是的var str=“Hi android”;var rep=str.replace(“Hi”,“hello”)和Hi变为hello。我试图将这个概念应用到上面的代码中,但我不明白,因为“函数(a,key,value)”阅读了我给出的描述
function getUrlParts(href) {
var partsSet = {};
var parts = href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(a,key,value) {
partsSet[key] = value;
});
return partsSet;
}