Javascript 提取多个段的问题

Javascript 提取多个段的问题,javascript,regex,Javascript,Regex,我试图从所附日志中捕获以下部分: aff_lsr?tt_adv_id=806&tt_cid=&tt_adv_sub=b3fff3722fc6b52aedde9b86bb22bf23&tt_time=2016-04-05+16%3A08%3A18& 应包括: ● tt_adv_id ● 806 ● tt_adv_sub ● b3fff3722fc6b52aedde9b86bb22bf23 ● tt_time ● 2016-04-05+16

我试图从所附日志中捕获以下部分:

aff_lsr?tt_adv_id=806&tt_cid=&tt_adv_sub=b3fff3722fc6b52aedde9b86bb22bf23&tt_time=2016-04-05+16%3A08%3A18&
应包括:

●   tt_adv_id
●   806
●   tt_adv_sub 
●   b3fff3722fc6b52aedde9b86bb22bf23
●   tt_time
●   2016-04-05+16%3A08%3A18
我试图创建一个正则表达式来提取所有以“?”“&”或“=”开头并以“=”或“&”结尾的字符串

这是我尝试过的正则表达式:

(?=[?/&/=]).*?(=)|(?=[=/&])
它忽略“=”和“&”之间的所有部分

所以我得到的结果是:

?tt_adv_id =

&tt_cid=

&tt_adv_sub=

&tt_time =

也许,这些简单的表达式可以提取我们想要的值:

.*(tt_adv_id)=([^&]*)&(?:tt_cid)=(?:[^&]*)&(tt_adv_sub)=([^&]*)&(tt_time)=([^&]*).*

如果您希望进一步探索或修改该表达式,将在的右上面板中解释该表达式。在中,您可以逐步观察它如何与一些示例输入匹配(如果您愿意)

const regex=/.*tt_adv_id=[^&]*&?:tt_cid=?:[^&]*&tt_adv_sub=[^&]*&tt_time=[^&]*/gm; const str=`aff_lsr?tt_adv_id=806&tt_cid=&tt_adv_sub=b3fff3722fc6b52aedde9b86bb22bf23&tt_time=2016-04-05+16%3A08%3A18& `; 让m; 而m=regex.execstr!==空的{ //这是避免具有零宽度匹配的无限循环所必需的 如果m.index==regex.lastIndex{ regex.lastIndex++; } //可以通过'm`-变量访问结果。 m、 forEachmatch,groupIndex=>{ log`find match,group${groupIndex}:${match}`; }; } 你可以简单地使用

/[?&=]([^&=]+)/
[?&=]-匹配?,&或= [^&=]+-匹配除&和=之外的任何内容一次或多次 而不是每一场比赛的第一个角色

设str=aff_lsr?tt_adv_id=806&tt_cid=&tt_adv_sub=b3fff3722fc6b52aedde9b86bb22bf23&tt_time=2016-04-05+16%3A08%3A18& 让matched=str.match/[?&=][^&=]+/g.mapv=>v.substr1
console.logmatched字符串是否始终为给定格式?这似乎是URL的查询参数,为什么tt_cid不包含在最终结果中?谢谢,它可以工作,但我确实需要6个不同的捕获组。您知道如何将其捕获到6个不同的组中吗?
/[?&=]([^&=]+)/