我正在尝试解析由以key &
或value分隔的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的正则表达式支持来匹配/(?:&|&)?([^=]+)=([^&]+)/
与PHPpreg_match_all()
函数相似的模式的多次出现?
我的目标是通过一些子匹配来获得结果,例如:
[['1111342', '348572'], ['Adam%20Franco', 'Bob%20Jones']]
or
[['1111342', 'Adam%20Franco'], ['348572', 'Bob%20Jones']]
从评论中悬挂
2020评论:现在,我们不再使用regex,而是URLSearchParams
为我们完成了所有这些工作,因此不再需要自定义代码,更不用说regex了。
我建议使用另一种正则表达式,使用子组分别捕获参数的名称和值:
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
给定下面的字符串 [NeMo(PROD)]10.10.100.100(EFA-B-3)[博科FC-Switch]传感器:电源#1(SNMP自定义表)关闭(无此名称(SNMP错误#2)) 我尝试获取多个匹配项以提取以下值: 因为我是正则表达式的初学者,所以我试图定义一些“规则”: 提取第一个圆括号内的第一个值,例如PROD 提取第一个闭合方括号和第二个开口圆括号之间的值,例如10.10.100.10
我们得到了一些这样的内容:
我有一个多行文本,我想从这里匹配单词“Description Amount”和以逗号作为分隔符的随机数字之间的文本。 示例输入: 预期产出: 输入示例: 预期产出: 输入包含多个换行符的变量。我使用了以下正则表达式: 但还需要改进。谢谢你。
有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。
问题内容: 如何找到与Java中的正则表达式匹配的所有子字符串?(类似于.Net中的Regex.Matches) 问题答案: 创建一个Matcher并用于将其放置在下一个匹配项上。
问题内容: 我想使用正则表达式匹配字符串的一部分,然后访问带括号的子字符串: 我究竟做错了什么? 我发现上面的正则表达式代码没有任何问题:我要针对的实际字符串是: 报告“%A”未定义似乎是一个非常奇怪的行为,但与该问题没有直接关系,因此我打开了一个新的代码, 为什么匹配的子字符串在JavaScript中返回“未定义”? 。 问题在于它的参数就像一条语句一样,并且由于我正在记录的字符串()具有特殊值