猿问

在 JS 中使用正则表达式从 Cloudflare cdn-cgi/trace 文本结果中提取

您好我打算使用 Cloudflare cdn-cgi 跟踪服务来获取客户端 IP 和用户代理结果。如果我获取此链接:https://www.cloudflare.com/cdn-cgi/trace,我得到的结果是文本格式。结果文本示例:


fl=47f54

h=www.cloudflare.com

ip=11.111.11.11

ts=1597428248.652

visit_scheme=https

uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

colo=OH

http=http/2

loc=US

tls=TLSv1.3

sni=plaintext

warp=off

我做了一些研究,发现我需要使用正则表达式?但不确定如何从结果中仅提取 ip 和 uag。


...

ip=11.111.11.11

...

uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

...

对于我获取的每个结果,如何从上述文本中提取结果11.111.11.11(所有客户端的 ip 更改)和(所有客户端的 uag 或用户代理更改)?Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36


海绵宝宝撒
浏览 346回答 2
2回答

元芳怎么了

你可以试试:^(?:ip|uag)=(.*)$上述正则表达式的解释:^, $- 分别代表行的开始和结束。(?:ip|uag)ip- 表示匹配或uag字面意思的非捕获组。=-=从字面上表示。(.*)- 表示匹配任何零个或多个时间的第一个处理组,前面是ip=or uag=。您可以在此处找到上述正则表达式的演示。const myRegexp = /^(?:ip|uag)=(.*)$/gm;const myString = `fl=47f54h=www.cloudflare.comip=11.111.11.11ts=1597428248.652visit_scheme=httpsuag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36colo=OHhttp=http/2loc=UStls=TLSv1.3sni=plaintextwarp=off`;let match;let resultString = "";match = myRegexp.exec(myString);while (match != null) {  resultString = resultString.concat(match[1] + "\n");  match = myRegexp.exec(myString);}console.log(resultString);第二种方法:const myString = `fl=47f54h=www.cloudflare.comip=11.111.11.11ts=1597428248.652visit_scheme=httpsuag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36colo=OHhttp=http/2loc=UStls=TLSv1.3sni=plaintextwarp=off`;// Split on new line filter on the condition that element starts with ip or uag and joinconsole.log(myString.split("\n").filter(el => el.startsWith("ip") || el.startsWith("uag")).join('\n'));

森林海

如何将其转换为 JSON 然后访问它。async function getCloudflareJSON(){let data = await fetch('https://1.1.1.1/cdn-cgi/trace').then(res=>res.text())let arr = data.trim().split('\n').map(e=>e.split('='))return Object.fromEntries(arr)}getCloudflareJSON().then(console.log)输出:{fl: "202f225", h: "1.1.1.1", ip: "47.37.137.777", ts: "1625581799.09", visit_scheme: "https", …}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答