如何用正则提取数组特定值?Cypress E2E测试场景
解决Cypress E2E测试中站点地图URL的正则过滤问题
需求1:提取从/flux/sitemaps/开始的完整路径
针对原URL数组,可通过正则匹配保留/flux/sitemaps/及其后续内容,实现代码如下:
const originalUrls = [ "https://xxxxxxxxx.com/flux/sitemaps/sitemap_cms_1.xml", "https://xxxxxx.com/flux/sitemaps/sitemap_category_1.xml" ]; // 方法1:使用match提取目标片段 const filteredPaths = originalUrls.map(url => { // 匹配从/flux/sitemaps/到.xml结尾的完整路径 const matchResult = url.match(/\/flux\/sitemaps\/.*\.xml$/); // 匹配成功返回结果,失败可按需保留原URL return matchResult ? matchResult[0] : url; }); // 方法2:使用replace替换掉前置无关内容 const filteredPathsAlt = originalUrls.map(url => url.replace(/^.*(?=\/flux\/sitemaps\/)/, '') );
正则说明
/\/flux\/sitemaps\/.*\.xml$/:精准匹配以/flux/sitemaps/开头、.xml结尾的路径片段,确保只提取有效站点地图路径/^.*(?=\/flux\/sitemaps\/)/:匹配/flux/sitemaps/之前的所有内容(含域名),通过替换为空保留目标路径
需求2:仅提取.xml文件名
如果只需要最后的文件名部分,可使用以下代码:
const originalUrls = [ "https://xxxxxxxxx.com/flux/sitemaps/sitemap_cms_1.xml", "https://xxxxxx.com/flux/sitemaps/sitemap_category_1.xml" ]; const filteredFilenames = originalUrls.map(url => { // 匹配最后一个斜杠后的.xml文件名 const matchResult = url.match(/[^\/]+\.xml$/); return matchResult ? matchResult[0] : url; });
正则说明
/[^\/]+\.xml$/:[^\/]+匹配任意非斜杠字符(即最后一个斜杠后的内容),结合\.xml$确保只提取以.xml结尾的文件名
在Cypress中的实际应用示例
结合E2E测试场景,对比预生产与生产环境的站点地图内容:
// 预生产环境获取并处理站点地图列表 cy.request('https://pre-prod.example.com/flux/sitemaps/index.xml') .then(res => { // 解析XML得到URL数组(可使用Cypress自带或第三方XML解析工具) const preProdUrls = parseXmlToUrls(res.body); const preProdSitemaps = preProdUrls.map(url => url.match(/[^\/]+\.xml$/)[0]); cy.wrap(preProdSitemaps).as('preProdSitemaps'); }); // 生产环境获取并对比 cy.request('https://prod.example.com/flux/sitemaps/index.xml') .then(res => { const prodUrls = parseXmlToUrls(res.body); const prodSitemaps = prodUrls.map(url => url.match(/[^\/]+\.xml$/)[0]); cy.get('@preProdSitemaps').then(preProd => { // 深度对比两个环境的站点地图文件名是否一致 expect(prodSitemaps).to.deep.equal(preProd); }); });
内容的提问来源于stack exchange,提问作者user3095223
相关产品推荐
相关产品推荐

