1

我有这个图片网址: http: //files.myweb.com/12/06/002_xz808/normal_paris_01.jpg

我需要得到这个http://files.myweb.com/12/06/002_xz808/paris_01.jpg

我不能使用简单的替换功能,"normal_"因为这个关键字可能会意外地出现在其路径中的文件名之前。我需要在最后一次使用它,"normal_"但我不知道如何。请帮忙。

4

3 回答 3

2

希望这可以帮助:

function replNormal(normal) {
    return normal.replace(/^(.*)normal\_(.*?)$/, '$1$2');
}
console.log(replNormal("http://files.myweb.com/12/06/normal_002_xz808/normal_paris_01.jpg"));

前面的正则表达式(括号中的部分)中的捕获组是贪婪的,然后是惰性的。

贪婪的 (.*) 想要在它停止捕获之前尽可能地扩展。

懒惰的人(。*?)希望在满足其捕获要求时尽快退出。

替换字符串中的反向引用告诉它将在第一个和第二个捕获组中找到的内容直接连接在一起,跳过未捕获的 normal_

于 2012-08-30T01:16:57.270 回答
1

您只能在路径的最后一段中匹配“/normal_”,如下所示:

var url = "http://files.myweb.com/12/06/002_xz808/normal_paris_01.jpg";
url = url.replace(/\/normal_([^\/]+)$/, "\/$1");

工作演示:http: //jsfiddle.net/jfriend00/rzj8u/

这只会替换 URL 最后一段中的“normal_”(后面没有斜杠)。

于 2012-08-30T01:16:49.620 回答
1

有很多方法可以解决这个问题。首先想到的是在 上拆分 URL /,并在最后一个组件中进行替换,然后将其重新组合在一起:

var url = 'http://files.myweb.com/12/06/002_xz808/normal_paris_01.jpg';
var parts = url.split('/');
// Remove the last part, everything following the last /
// and do the replacement
var img = parts.pop().replace("normal_", "");
// Stick the new string back onto the array
parts.push(img)
// And put all the / back in...
url = parts.join("/");

console.log(url);
// "http://files.myweb.com/12/06/002_xz808/paris_01.jpg"
于 2012-08-30T01:10:35.543 回答