Google Sheets提取URL中images/后内容的正确方法
Google Sheets 提取"images/"后子串的正确方法
需求说明
我在Google Sheets中有如下URL数据:
| url |
|---|
| https://www.testwebsite.com/compute/v1/test/images-prd-5d4d/glob/images/testimage-vsfd |
| https://www.testwebsite.com/compute/v1/test/images-prd-5d4d/glob/images/testimage-sdawr| |
需要提取**"images/"之后的内容**,但要注意:如果提取结果包含|符号,则返回空值,预期结果如下:
| url | 提取结果 |
|---|---|
| https://www.testwebsite.com/compute/v1/test/images-prd-5d4d/glob/images/testimage-vsfd | testimage-vsfd |
| https://www.testwebsite.com/compute/v1/test/images-prd-5d4d/glob/images/testimage-sdawr|testimage-sdawr |
我之前写的Google Apps Script函数只能提取最后一个"-"之后的内容,代码如下:
function strip() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName("Sheet6"); const vs = sh.getRange(2,1,sh.getLastRow() - 1).getDisplayValues().flat(); let vo = vs.map(s => [s.match(/\b[0-9A-Zaz/]+$/gi)[0]]); sh.getRange(2,2,vo.length,1).setValues(vo); }
解决方案
方法1:正则表达式匹配法
修改正则逻辑,精准定位images/并提取后续内容,同时添加|符号判断:
function extractAfterImages() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName("Sheet6"); const dataRange = sh.getRange(2, 1, sh.getLastRow() - 1); const urls = dataRange.getDisplayValues().flat(); const results = urls.map(url => { // 匹配images/之后的所有内容 const match = url.match(/images\/(.*)$/); if (!match) return [""]; const extracted = match[1]; // 包含|则返回空,否则返回提取内容 return extracted.includes("|") ? [""] : [extracted]; }); sh.getRange(2, 2, results.length, 1).setValues(results); }
方法2:字符串拆分法(非正则)
如果不想用正则,也可以通过字符串拆分实现需求:
function extractAfterImages() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName("Sheet6"); const dataRange = sh.getRange(2, 1, sh.getLastRow() - 1); const urls = dataRange.getDisplayValues().flat(); const results = urls.map(url => { const parts = url.split("images/"); if (parts.length < 2) return [""]; const extracted = parts[1]; return extracted.includes("|") ? [""] : [extracted]; }); sh.getRange(2, 2, results.length, 1).setValues(results); }
关键说明
- 两种方法都能准确定位
images/的位置,提取后续全部内容; - 新增了
|符号判断逻辑,完全符合预期结果要求; - 替换了原代码中匹配范围偏差的正则,避免提取错误内容。
内容的提问来源于stack exchange,提问作者silentninja89
相关产品推荐
相关产品推荐

