【问题标题】:Regex to Extract Last Part of URL and Before Another Character正则表达式提取 URL 的最后一部分和另一个字符之前
【发布时间】:2020-01-17 13:43:44
【问题描述】:

在网址中

https://image/4x/c1/abc/5b026cdb06921e7ca5f7a24aff46512e--wedding-vendors-wedding-receptions.jpg https://image/4x/c1/abc/5b026cdb06921e7ca5f7a24aff46512e.jpg

我正在尝试在这两个字符串中捕获5b026cdb06921e7ca5f7a24aff46512e。字符串总是出现在最后一个斜杠之后,它是字母和数字的随机组合,可能有也可能没有--randomtext,最后有.jpg

我目前有([^\/]+)$ 在最后一个斜杠之后提取任何字符串,但想知道如何捕获 .jpg 和 --randomtext(如果存在)之前的所有内容。我将在 javascript 中使用它。

【问题讨论】:

  • 你应该尝试一些东西并发布你尝试过的东西以及为什么它不起作用,否则我们不知道你在哪个部分遇到了困难。仅仅为你写一个答案对你或其他人没有多大帮助
  • 尝试使用捕获组^.*\/([a-z0-9]+).*\.jpg$regex101.com/r/efXxYY/1
  • @wiktor-stribiżew 您链接到的答案没有解决问题的--random-text 部分。
  • 好吧,可能([^\/]*?)(?:--[^\/]*)?\.\w+$ 会做到。具体规格是什么?
  • @Thefourthbird 提出了一些可行的建议,叹息......我宁愿让 OP 自己努力尝试一下

标签: javascript regex


【解决方案1】:

如果最后一个正斜杠后面是字母和数字 a-z0-9 的随机组合,则选择使用捕获组。

^.*\/([a-z0-9]+).*\.jpg$

部分

  • ^ 字符串开始
  • .*\/ 匹配直到包括最后一个 /
  • ([a-z0-9]+) 在匹配 1+ 字符 a-z 或数字 0-9 的第 1 组中捕获
  • .* 匹配除换行符以外的任何字符 0+ 次
  • \.jpg匹配.jpg
  • $ 字符串结束

Regex demo

const regex = /^.*\/([a-z0-9]+).*\.jpg$/;
["https://image/4x/c1/abc/5b026cdb06921e7ca5f7a24aff46512e--wedding-vendors-wedding-receptions.jpg",
  "https://image/4x/c1/abc/5b026cdb06921e7ca5f7a24aff46512e.jpg"
].forEach(s => console.log(s.match(regex)[1]));

【讨论】:

  • 感谢您的彻底分解。正则表达式的超级新手,所以这对我来说是一个非常好的起点
  • 在我之前的尝试中,我对捕获组没有很好的理解,所以我在不知道发生了什么的情况下左右应用括号。我非常感谢您的解释
【解决方案2】:

你可以用/分割并取最后一部分,然后用空字符串替换--.jpg之后的任何内容

let arr = ["https://image/4x/c1/abc/5b026cdb06921e7ca5f7a24aff46512e--wedding-vendors-wedding-receptions.jpg","https://image/4x/c1/abc/5b026cdb06921e7ca5f7a24aff46512e.jpg"]

let getText = (url) =>{
  return url.split('/').pop().replace(/(--.*|\.jpg)$/g,'')
}

arr.forEach(url=> console.log(getText(url)))

如果有机会多次使用-- 而不是替换,您可以简单地匹配match(/^[a-z0-9]+/g) 并从匹配数组中获取第一个元素

【讨论】:

  • 谢谢!试图自学一些正则表达式,但这绝对是可靠的
  • @saoirse 总是乐于提供帮助,:)
【解决方案3】:

用途:

([^\/]*?)(?:--.*)?\.jpg$

你想要的匹配将在$1

https://regex101.com/r/gZ9kSi/1

【讨论】:

  • ([^\/]*?)(?:--.*)?\.jpg$wrongMy suggestion 是您的正则表达式的修复程序。
猜你喜欢
  • 2011-07-02
  • 2017-05-27
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多