我正在尝试从随附的日志中捕获波纹管部分:
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 =
答案 0 :(得分:1)
也许这些简单的表达式可以提取出我们想要的值:
.*(tt_adv_id)=([^&]*)&(?:tt_cid)=(?:[^&]*)&(tt_adv_sub)=([^&]*)&(tt_time)=([^&]*).*
或
(tt_adv_id)=([^&]*)&(?:tt_cid)=(?:[^&]*)&(tt_adv_sub)=([^&]*)&(tt_time)=([^&]*)
该表达式在this demo的右上角进行了说明,如果您想进一步探索或修改它,在this link中,您可以逐步观察它如何与某些示例输入匹配步骤,如果您愿意的话。
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&
`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
答案 1 :(得分:1)