【问题标题】:Regexp, remove part in the middle of a url - javascript正则表达式,删除网址中间的部分 - javascript
【发布时间】:2021-06-08 21:52:26
【问题描述】:

我是 javascript 正则表达式的初学者,有点困惑: 这是网址:

https://www.example.com.au/media/catalog/product/cache/ca6a1abe4cdf1032b0397780507d1aa8/h/u/hugh_camel_1_web.jpg

我想删除产品 ca6a1abe4cdf1032b0397780507d1aa8/ 的 ID,但我在查看和测试我能找到的所有示例时有点头晕(没有成功)。

预期输出:

https://www.example.com.au/media/catalog/product/cache/h/u/hugh_camel_1_web.jpg

提前感谢您的帮助。

对正则表达式的任何详细解释也很棒。

【问题讨论】:

  • 必须是正则表达式吗?我认为如果要删除的字符串始终位于同一位置,则使用字符串拆分会更简单
  • 如果您不使用正则表达式,解决方案可能是'https://www.example.com.au/media/catalog/product/cache/ca6a1abe4cdf1032b0397780507d1aa8/h/u/hugh_camel_1_web.jpg'.split('/').filter(i=>i.length < 30).join('/')
  • @GlenK,是的,它必须是正则表达式。
  • @quicVO 我需要使用正则表达式,但仍然对你的方法感兴趣,你能解释一下 i.length 部分吗?干杯
  • 我删除了 URL 中每个斜杠长度超过 30 个字符的部分

标签: javascript regex url


【解决方案1】:

你可以使用这个正则表达式:

const url = "https://www.example.com.au/media/catalog/product/cache/ca6a1abe4cdf1032b0397780507d1aa8/h/u/hugh_camel_1_web.jpg";
const regex = /(\product\/cache\/)[^\/]*\//;
let result = url.replace(regex, '$1');
console.log(result);

输出:

https://www.example.com.au/media/catalog/product/cache/h/u/hugh_camel_1_web.jpg

正则表达式的解释:

  • (\product\/cache\/) - /product/cache/ 的捕获组
    • 注意:您可以使用正向后视,但尚未得到所有浏览器的普遍支持
  • [^\/]* - 扫描所有内容,直到下一个 /
  • \/ - 扫描/
  • 在替换中只使用捕获组,然后忽略扫描的模式:'$1'

编辑:这是不捕获组的积极后向版本,例如替换可以是空字符串''

const url = "https://www.example.com.au/media/catalog/product/cache/ca6a1abe4cdf1032b0397780507d1aa8/h/u/hugh_camel_1_web.jpg";
const regex = /(?<=\product\/cache\/)[^\/]*\//;
let result = url.replace(regex, '');
console.log(result);

【讨论】:

  • 非常感谢您的详细回答(我不知道你为什么顺便投了反对票......)不幸的是,即使它似乎在你的 sn-p 中工作,当我使用它或测试它似乎也在删除目录/产品/
  • 好吧,我的错!我只是误解了你的最后一点 :) 效果很好,非常感谢!
  • 另请参阅有关正面后视的说明
  • 是的,我读到过,实际上尝试了一下,但我仍然需要训练正则表达式
  • 查看 EDIT 正面的后视版本
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 2019-02-16
  • 2023-03-20
相关资源
最近更新 更多