无法按分隔符拆分包含URL与模糊哈希的字符串
拆分"URL&&&&模糊哈希"格式的重复字符串
给定一个由图片URL&&&&模糊哈希重复组成的字符串,各单元之间用逗号分隔,需要将其拆分为包含每个完整单元的数组。
输入示例
https://example.com/1.jpg&&&&UAD%@4mQ%iv%7CH;?JD$-p8qD%%Nnf:QX.Vr-B,https://example.com/2.jpg&&&&URCPxDxu4mog^-xuIUjc%Nxvn,Rj%Ot8RiRi,https://example.com/3.jpg&&&&UeF68}_N-=-;%MRjRjofM|M{j[ogxuxuofWA,https://example.com/4.jpg&&&&U|H__P%MRjof_4xuWAof%NoejskCozaeofof,https://example.com/5.jpg&&&&UEE3g_W9D?%Y_IRURj%cNHt6xUaeR%t7j=of
期望输出
["https://example.com/1.jpg&&&&UAD%@4mQ%iv%7CH;?JD$-p8qD%%Nnf:QX.Vr-B","https://example.com/2.jpg&&&&URCPxDxu4mog^-xuIUjc%Nxvn,Rj%Ot8RiRi","https://example.com/3.jpg&&&&UeF68}_N-=-;%MRjRjofM|M{j[ogxuxuofWA","https://example.com/4.jpg&&&&U|H__P%MRjof_4xuWAof%NoejskCozaeofof","https://example.com/5.jpg&&&&UEE3g_W9D?%Y_IRURj%cNHt6xUaeR%t7j=of"]
你之前正则的问题分析
你尝试的两个正则都存在核心缺陷:
/&&&&.+?(,https)?/ig:仅匹配&&&&后的内容,完全遗漏了前面的URL部分,且(,https)?会错误捕获单元末尾的逗号和下一个单元的URL前缀,导致结果缺失关键信息。/.+&&&&.+(,https)?/ig:.的贪婪匹配会一次性抓取多个单元的内容,无法精确分割单个单元,同样会错误包含末尾的逗号和下一个单元的前缀。
解决方案
方案1:使用split结合正向预查分割
利用正向预查(?=https:\/\/)定位单元分隔的逗号——即仅在逗号后面紧跟https://时,才将该逗号作为分割点,这样不会破坏单元本身的内容。
const inputStr = "https://example.com/1.jpg&&&&UAD%@4mQ%iv%7CH;?JD$-p8qD%%Nnf:QX.Vr-B,https://example.com/2.jpg&&&&URCPxDxu4mog^-xuIUjc%Nxvn,Rj%Ot8RiRi,https://example.com/3.jpg&&&&UeF68}_N-=-;%MRjRjofM|M{j[ogxuxuofWA,https://example.com/4.jpg&&&&U|H__P%MRjof_4xuWAof%NoejskCozaeofof,https://example.com/5.jpg&&&&UEE3g_W9D?%Y_IRURj%cNHt6xUaeR%t7j=of"; const resultArray = inputStr.split(/,(?=https:\/\/)/); console.log(resultArray);
方案2:使用match匹配完整单元
编写正则匹配从https://开始,直到下一个单元的起始逗号(或字符串结尾)的所有内容,用非贪婪匹配+?避免过度抓取。
const inputStr = "https://example.com/1.jpg&&&&UAD%@4mQ%iv%7CH;?JD$-p8qD%%Nnf:QX.Vr-B,https://example.com/2.jpg&&&&URCPxDxu4mog^-xuIUjc%Nxvn,Rj%Ot8RiRi,https://example.com/3.jpg&&&&UeF68}_N-=-;%MRjRjofM|M{j[ogxuxuofWA,https://example.com/4.jpg&&&&U|H__P%MRjof_4xuWAof%NoejskCozaeofof,https://example.com/5.jpg&&&&UEE3g_W9D?%Y_IRURj%cNHt6xUaeR%t7j=of"; const resultArray = inputStr.match(/https:\/\/.+?(?=,https:\/\/|$)/g); console.log(resultArray);
内容的提问来源于stack exchange,提问作者Mike K
相关产品推荐
相关产品推荐

