我正在构建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"和所有(在Shell/Bash上工作的*操作符)之间的"one_answers".ipfs干净吗?使用什么操作符和语法调整?
还有一个额外的好处:如何在这个检测中包含,并计数/验证这个开头的"ba"具有后协议(https://)和.ipfs)。,比如这里"https://bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu.ipfs."这是"bafybeignbgeutsyhunhidcki63wmvmjfi7xipmiorwlt3o27aot2ydgwu";(应该是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可以在不同的base (docs)中编码。
使用能够正确检测url和路径中CID的专用库:
https://www.npmjs.com/package/is-ipfs