URL 内容的高级检查(字符数,* 运算符)

Advanced checking of URL content (characters count, * operator)

我正在构建 FrameworkJS,其用途之一是检测其环境。

最近,我添加了这 3 个条件来检测 URL 是否包含所需的文本:

if(window.location.href.indexOf("ba"*".ipfs.") > -1) {
       alert("Alert: IPFS!");
}

if(window.location.href.indexOf("/ipfs/Qm") > -1) {
       alert("Alert: IPFS!");
}

if(window.location.href.indexOf("/ipfs/ba") > -1) {
       alert("Alert: IPFS!");
}

当检测到 IPFS 环境时显示警报。

只有最后两个有效:

https://ipfs.io/ipfs/Qmc92ioRvt1KB18GanLUq8qMrXoTeaj4m9iXX3NmjaYWTN/

https://ipfs.io/ipfs/bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu/#x-ipfs-companion-no-redirect

但是第一个没用:

https://bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu.ipfs.dweb.link/#x-ipfs-companion-no-redirect

if(window.location.href.indexOf("ba"*".ipfs.") > -1) {
       alert("Alert: IPFS!");
}

如何检查 URL 是否包含“ba”以及“ba”和“.ipfs”之间的所有内容(* 在 Shell/Bash 上运行的运算符)?使用什么运算符和语法调整?

此外,还有一个好处:如何包含在这个检测中,以及 count/validate 这个起始“ba”在协议 (https://) 和 .ipfs 之后有多少个字符,就像这里的“https” ://bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu.ipfs。”那是“bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu”(应该是 59 个字符)?

你听说过正则表达式(regex)吗?

对于您的情况,您可以尝试将 URL 与 /ba(.*)\.ipfs\./

进行匹配

所以你的代码看起来像这样:

if(window.location.href.match(/ba(.*)\.ipfs\./)) {
       alert("Alert: IPFS!");
}

欢迎在这里测试:https://regex101.com/

您可以在 Javascript 中了解有关正则表达式的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

奖金问题:

const url = "https://bafybeifoowqb5fhp7vlusauhshfhiygd3g2hgxjkrlnuccw5lx6umrb5oy.ipfs.";

const matches = /ba(.*)\.ipfs\./.exec(url);

console.log(matches[1].length);

您不应该天真地匹配 ba(base32 中的 CIDv1)和 Qm(Base58 中的 CIDv0)前缀,因为 CIDv1 可以在不同的基(docs)中编码。

使用能够正确检测 URL 和路径中的 CID 的专用库:
https://www.npmjs.com/package/is-ipfs