在Javascript中查找URL中的基本名称

时间:2010-01-02 13:34:25

标签: javascript regex

我想从Javascript中的图片网址中提取基本名称。有人会关心我的正手法吗?

规则是:

  • 返回上一个/

    的最后.的所有内容

    www.domain.com/images/的 image.hires .JPG

  • 如果未找到.,则返回完整的基本名称 www.domain.com/images/image_hi_res

我有一个笨拙的/\/[^.]+\.[^.]+$/,但不知道如何使/.可选,以及如何仅查找最后.

  

一如既往地为所有伟大的投入欢呼。我选择了一个开箱即用的正则表达式。

6 个答案:

答案 0 :(得分:27)

又一个解决方案:

url.replace(/^.*\/|\.[^.]*$/g, '')

答案 1 :(得分:12)

在这种情况下我实际上不会使用正则表达式,只是lastIndexOfsubstring。像

这样的东西
function findBaseName(url) {
    var fileName = url.substring(url.lastIndexOf('/') + 1);
    var dot = fileName.lastIndexOf('.');
    return dot == -1 ? fileName : fileName.substring(0, dot);
}

答案 2 :(得分:1)

试试这个正则表达式:

/([^/]+(?=\.[^/.]*$)|[^/.]+$)/

答案 3 :(得分:1)

在你的例子中,假设输入字符串是整个URL而已,我已经成功了

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

首先尝试匹配从上一个/到最后一个.的所有内容;如果没有点,它将尝试匹配从最后/到字符串结尾的所有内容。

领先/包含在匹配中(JavaScript不支持lookbehind,否则我可以使用它),所以你需要砍掉匹配的第一个字符。

答案 4 :(得分:0)

如果您有权访问DOM,则可以使用HTMLHyperlinkElementUtils代码的原生<a>属性:

function urlInfo (url) {

  var props = 'hash host hostname href origin password pathname port protocol username search';

  if (!window.urlInfoAnchorElement)
    window.urlInfoAnchorElement = document.createElement('a');

  urlInfoAnchorElement.href = url;

  return props.split(' ').reduce(function (m, v, i) {
    m[v] = urlInfoAnchorElement[v]; return m;
  }, {});

}

// Example:
urlInfo('http://localhost:4000/guidelines/7yQxvndK?get=sup&love=1#oiwjef');

/* => {
  hash: "#oiwjef"
  host: "localhost:4000"
  hostname: "localhost"
  href: "http://localhost:4000/guidelines/7yQxvndK?get=sup&love=1#oiwjef"
  origin: "http://localhost:4000"
  password: ""
  pathname: "/guidelines/7yQxvndK"
  port: "4000"
  protocol: "http:"
  search: "?get=sup&love=1"
} */

答案 5 :(得分:-2)

我建议使用FileSystemObject activex。当然,您需要在注册表中将其标记为安全,以便在没有唠叨屏幕的情况下执行它,但它非常有用。你的电话...... GetBaseName功能可以做你想要的。