如何在JavaScript中生成匹配指定Blob URL格式的正则表达式?
JavaScript 适配的指定格式Blob URL匹配正则
正则规则说明
待匹配URL固定结构为 https://<任意内容>.blob.core.windows.net/<任意内容>?<任意内容>,三个标记为<任意内容>的可变段允许包含特殊字符,除可变段外其余内容为固定静态值。
可直接使用的正则代码
1. 整串校验场景(验证输入完全符合格式)
适合表单校验、格式合法性判断场景,会严格匹配整个字符串,不允许前后有多余内容:
// 基础版:.不匹配换行符,覆盖99%常规URL场景 const blobUrlValidateRegex = /^https:\/\/.+?\.blob\.core\.windows\.net\/.+?\?.+$/; // 极端兼容版:加s修饰符,允许可变段包含换行符 const blobUrlValidateRegexWithLineBreak = /^https:\/\/.+?\.blob\.core\.windows\.net\/.+?\?.+$/s;
正则分段逻辑:
^:锚定字符串开头,避免URL前带多余前缀https:\/\/:匹配固定的HTTPS协议头,正则字面量中/需转义.+?:非贪婪匹配第一个可变段(存储账户名位置),至少1个任意字符,不会吞掉后面的固定域名\.blob\.core\.windows\.net\/:匹配固定域名后缀和路径起始斜杠,.是正则元字符,匹配字面量点时必须转义.+?:非贪婪匹配第二个可变段(Blob路径段),匹配到第一个?即停止\?:匹配固定的查询串起始问号,?是正则元字符,匹配字面量问号时必须转义.+:匹配第三个可变段(查询参数内容)$:锚定字符串结尾,避免URL后带多余后缀
2. 文本提取场景(从大段内容中捞出符合格式的URL)
适合日志解析、内容爬取场景,不需要锚定字符串首尾,可全局匹配所有符合规则的URL:
const blobUrlExtractRegex = /https:\/\/.+?\.blob\.core\.windows\.net\/.+?\?\S+/g;
和校验版的差异:
- 去掉了首尾的
^/$锚定 - 最后一段用
\S+匹配查询参数,遇到空白字符即停止,适配文本中URL前后是空格、换行的场景 - 加了
g全局匹配标志,可一次性提取出文本中所有符合规则的URL
扩展用法
如果需要单独提取三个可变段的内容,给可变段加上捕获括号即可:
const blobUrlWithCapture = /^https:\/\/(.+?)\.blob\.core\.windows\.net\/(.+?)\?(.+)$/; const matchResult = 'https://demo.blob.core.windows.net/container/file.txt?sv=2023-01-01'.match(blobUrlWithCapture); // matchResult[1] 是第一个可变段:demo // matchResult[2] 是第二个可变段:container/file.txt // matchResult[3] 是第三个可变段:sv=2023-01-01
注意:上述正则默认要求三个可变段至少有1个字符,如果业务允许某个可变段为空,把对应位置的
+改成*即可。
内容的提问来源于stack exchange,提问作者Sagar Jajoriya
相关产品推荐
相关产品推荐

