【问题标题】:Extract string from malformed URL using Javascript, based on multiple characters基于多个字符,使用 Javascript 从格式错误的 URL 中提取字符串
【发布时间】:2014-10-07 17:14:19
【问题描述】:

我有一堆 Wordpress 博客,它们使用 PHP DOM“scraper”从参考页面中提取 html。它会根据网站的 url 和已知所有徽标所在的固定文件路径生成徽标的路径。问题是,我们刚刚实现了一个 CDN。

博客上的徽标路径来自<img src="http://www.example.com/images/logo.png" /><img src="http://www.example.com//cdninfoinalongstring/morecdnstuff/images/logo.png" />,后者显然是不正确的。

我需要把src改成:

<img src="//cdninfoinalongstring/morecdnstuff/images/logo.png" />

我熟悉.indexOf() 以及.substring().split().pop() 之类的东西,但尝试引用多个字符,在这种情况下删除“//”之前的字符串失败。

【问题讨论】:

  • 所以您只想从所有字符串中删除http://www.domain.com?你知道这个域还是它总是不同的?
  • 更改服务器端不是更好吗?不是每个人都启用了 JS。
  • @Oriol - 如果他们禁用了 javascript,那么看不到徽标将是他们最小的问题。在这个网站和大多数其他网站上。但是,公平地说,这是一场范围远远超出这个问题的辩论。在这种情况下,无法在事物的服务器端进行更改。
  • @Leeish - 每个站点上的域都不同,每个站点都有自己独特的 CDN 路径到其徽标。但是,它将在每个站点上以相同的方式格式化。域,然后是 //,然后是 CDN 路径。我只需要删除两个斜线之前的所有内容。

标签: javascript regex string substring


【解决方案1】:

嗯,你可以这样做

var arr = document.querySelectorAll('img[^=http://www.domain.com]');
for (var i = 0; i < arr.length; i++) {
    arr[i].src = arr[i].src.replace(/^http(s)?:\/\/[^\/]+/, "");
}

【讨论】:

  • 如果你知道域,那么简单的事情就可以了。
  • 从某种意义上说,我不会知道域。我会,但在每种情况下都不同,并且可能会改变。
  • @user1729506 很高兴为您提供帮助:)
  • @AmitJoki - 很抱歉在接受您的回答后回溯,但我遇到了错误:Failed to execute 'querySelectorAll' on 'Document': 'img[^=http://www.domain.com]' is not a valid selector.
  • 刚刚发现问题。必须在 CSS 选择器之前加上 'src' ^.
【解决方案2】:

由于域并不总是已知的,我尝试了这个并且似乎取得了一些成功:

theLogoPath = $('div.logo a img').attr('src');
theLogoCdnPath = theLogoPath.split("//")[2];
$('div.logo a img').attr('src','//' + theLogoCdnPath);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 2018-02-05
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多