gpt4 book ai didi

javascript - 如何使用类似于 PHP 的 preg_match_all() 的 JavaScript 中的正则表达式匹配多次出现?

转载 作者:IT老高 更新时间:2023-10-28 13:17:13 26 4
gpt4 key购买 nike

我正在尝试解析由 && 分隔的 key=value 对组成的 url 编码字符串。

以下将只匹配第一次出现,将键和值分解为单独的结果元素:

var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/)

字符串 '1111342=Adam%20Franco&348572=Bob%20Jones' 的结果将是:

['1111342', 'Adam%20Franco']

使用全局标志 'g' 将匹配所有匹配项,但只返回完全匹配的子字符串,而不是分离的键和值:

var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/g)

字符串 '1111342=Adam%20Franco&348572=Bob%20Jones' 的结果将是:

['1111342=Adam%20Franco', '&348572=Bob%20Jones']

虽然我可以在 & 上拆分字符串并单独拆分每个键/值对,但有没有办法使用 JavaScript 的正则表达式支持来匹配模式 /(? :&|&)?([^=]+)=([^&]+)/ 类似于 PHP 的 preg_match_all() 函数?

我的目标是通过一些方法来获得结果,子匹配分隔如下:

[['1111342', '348572'], ['Adam%20Franco', 'Bob%20Jones']]

[['1111342', 'Adam%20Franco'], ['348572', 'Bob%20Jones']]

最佳答案

从评论中提升

2020 comment: rather than using regex, we now have URLSearchParams, which does all of this for us, so no custom code, let alone regex, are necessary anymore.

Mike 'Pomax' Kamermans

此处列出了浏览器支持https://caniuse.com/#feat=urlsearchparams


我会建议一个替代的正则表达式,使用子组来单独捕获参数的名称和值,re.exec() :

function getUrlParams(url) {
var re = /(?:\?|&(?:amp;)?)([^=&#]+)(?:=?([^&#]*))/g,
match, params = {},
decode = function (s) {return decodeURIComponent(s.replace(/\+/g, " "));};

if (typeof url == "undefined") url = document.location.href;

while (match = re.exec(url)) {
params[decode(match[1])] = decode(match[2]);
}
return params;
}

var result = getUrlParams("http://maps.google.de/maps?f=q&source=s_q&hl=de&geocode=&q=Frankfurt+am+Main&sll=50.106047,8.679886&sspn=0.370369,0.833588&ie=UTF8&ll=50.116616,8.680573&spn=0.35972,0.833588&z=11&iwloc=addr");

result 是一个对象:

{  f: "q"  geocode: ""  hl: "de"  ie: "UTF8"  iwloc: "addr"  ll: "50.116616,8.680573"  q: "Frankfurt am Main"  sll: "50.106047,8.679886"  source: "s_q"  spn: "0.35972,0.833588"  sspn: "0.370369,0.833588"  z: "11"}

正则表达式分解如下:

(?:            # non-capturing group  \?|&         #   "?" or "&"  (?:amp;)?    #   (allow "&", for wrongly HTML-encoded URLs))              # end non-capturing group(              # group 1  [^=&#]+      #   any character except "=", "&" or "#"; at least once)              # end group 1 - this will be the parameter's name(?:            # non-capturing group  =?           #   an "=", optional  (            #   group 2    [^&#]*     #     any character except "&" or "#"; any number of times  )            #   end group 2 - this will be the parameter's value)              # end non-capturing group

关于javascript - 如何使用类似于 PHP 的 preg_match_all() 的 JavaScript 中的正则表达式匹配多次出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/520611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com