【发布时间】:2010-10-05 22:58:44
【问题描述】:
我正在尝试解析由 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']]
【问题讨论】:
-
这里没有人推荐使用
replace有点奇怪。var data = {}; mystring.replace(/(?:&|&)?([^=]+)=([^&]+)/g, function(a,b,c,d) { data[c] = d; });完成。 JavaScript 中的“matchAll”是用替换处理函数而不是字符串“替换”。 -
请注意,对于那些在 2020 年仍然发现这个问题的人,答案是“不要使用正则表达式,使用 URLSearchParams,它会为您完成所有这些。”
标签: javascript regex