【问题标题】:Find particular string inside URL with Regex使用正则表达式在 URL 中查找特定字符串
【发布时间】:2016-05-06 10:05:46
【问题描述】:

我需要“正则表达式”——在 JavaScript 中——像这样的字符串:

http://some.domain.com/v/v1.0-4/19232_102032_21111986_n.jpg?param=fejrlwfje&list=fklwefljfre

我需要提取19232_102032_21111986_n,也就是http://some.domain.com/v/v1.0-4/.jpg?param=fejrlwfje&list=fklwefljfre之间的图片名称,并赋值给一个变量。

【问题讨论】:

  • 如果你知道比赛的前后部分,那么它可能不需要任何正则表达式
  • ? 分割,然后用/ 分割第一部分,然后从.jpg 中取出最后一项......或者,是的,使用正则表达式。
  • 没有适合您的解决方案,是吗?试试'http://some.domain.com/v/v1.0-4/19232_102032_21111986_n.jpg?param=fejrlwfje&list=fklwefljfre'.match(/\/([^\/?]+)\.jpg(?:\?|$)/)[1]
  • 谢谢,但我专门要求一个正则表达式。
  • @WiktorStribiżew 这是最好的解决方案,谢谢。如果你写下答案,你应该得到支持。再次感谢。

标签: javascript regex string match


【解决方案1】:

你可以使用

\/([^\/?]+)\.jpg(?:\?|$)

regex demo

模式说明

  • \/ - 一个斜线
  • ([^\/?]+) - 组 1(文件名)匹配除 /? 之外的 1 个或多个字符
  • \.jpg - 文字 .jpg
  • (?:\?|$) - 匹配 ? 或字符串结尾的非捕获组。

var s = 'http://some.domain.com/v/v1.0-4/19232_102032_21111986_n.jpg?param=fejrlwfje&li‌st=fklwefljfre';
var m  = s.match(/\/([^\/?]+)\.jpg(?:\?|$)/);
document.body.innerHTML = m ? m[1] : "No match!";

【讨论】:

  • 绝对是最好的解决方案,太棒了。
【解决方案2】:

试试这个:

var s = "http://some.domain.com/v/v1.0-4/19232_102032_21111986_n.jpg?param=fejrlwfje&list=fklwefljfre"
var result = /\/([a-z_0-9]+)\.jpg/.exec(s)[1];

【讨论】:

  • 这将在使用非 ascii 字符的 url 上失败
  • @Richard 我知道。但它回答了问题,并且永远不会匹配任何意想不到的东西)
  • 很好,但是still not perfect。如果没有更多上下文细节,您的正则表达式是正确的,并且可能在大多数情况下都有效,但它仍然不是 100% 安全的。关键是在字符串末尾或?(查询字符串)之前匹配它。哦,看理查德的回答——那是“更正确”。
  • @WiktorStribiżew 也许你是对的。很难说 OP 在你的例子中应该期待什么。无论如何 - 正则表达式在这里很糟糕
【解决方案3】:

假设没有'?'在你想匹配的字符串中,你可以试试:

/\/([^?/]*)(\?|$)/.exec("http://some.domain.com/v/v1.0-4/19232_102032_21111986_n.jpg?param=fejrlwfje&list=fklwefljfre")[1].slice(0,-4)

这将匹配最后一个'/'之后的所有字符,不是'/'或'?'在“?”之前或字符串的结尾。

切片调用用于删除“.jpg”部分。

【讨论】:

  • 您应该转义模式中的/。此外,.slice(0,-4) 可能不是摆脱可能丢失的扩展名的最佳方法。只需匹配扩展名即可。
  • 我不需要被转义,因为它是bewteen [ ]
【解决方案4】:

作为替代方案,可以通过使用String.splitString.substrArray.lastIndexOf 函数在不使用正则表达式的情况下实现:

var url = "http://some.domain.com/v/v1.0-4/19232_102032_21111986_n.jpg?param=fejrlwfje&list=fklwefljfre",
    url_part = url.split("?")[0],
    img_file = url_part.substr(url_part.lastIndexOf("/")+1).split(".")[0];

console.log(img_file);   // "19232_102032_21111986_n"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多