使用Javascript和regex修改URL的结尾

时间:2012-08-06 15:01:19

标签: javascript regex replace

我正在尝试清理一个URL(rss feed),以便在最后一个.rss(or.html)之后没有其他字符。我在w3schools.com上使用TryIt编辑器进行测试。以下是我的测试代码:

var str="http://rss.cnn.com/rss/cnn_world.rsstest";
var patt1=/(.*[.rss|.html]).*/g;
var result = str.replace(patt1, "$1");
document.write(result);

我遇到的问题是显示的结果是

http://rss.cnn.com/rss/cnn_world.rsstest

即。 “测试”没有被删除。我想知道是否有人可以检查我的正则表达式并解释我做错了什么?

谢谢。

4 个答案:

答案 0 :(得分:2)

首先,我建议jsFiddle或其他一些测试服务。原谅my bias

其他一些回答者似乎完全忽略了这一点,所以要解释你的错误:

  1. []不分组 - 它定义了一个字符类。你写的内容实际上匹配一个角色,即其中任何一个角色:.|hlmrst
  2. 如果没有$锚点,则两个.*可能与您期望的不匹配。
  3. 尝试改为:

    /(\.rss|\.html).*$/g
    

    这是jsFiddle演示。

答案 1 :(得分:1)

应该是var patt1=/(\.rss|\.html).*$/g;因为。是特殊字符

答案 2 :(得分:1)

尝试使用substring

string.substring(from, to)

和lastindexof函数

string.lastIndexOf(searchvalue) 

将它合并到:

var result = str.substring(0, str.toLowerCase().lastIndexOf("rss") + 3);

最后:

if (str.toLowerCase().lastIndexOf(".rss") > str.toLowerCase().lastIndexOf(".html")) 
{ result = str.substring(0, str.toLowerCase().lastIndexOf(".rss") + 4);
} else {
result = str.substring(0, str.toLowerCase().lastIndexOf(".html") + 5);
}

答案 3 :(得分:0)

你为什么不这样做

var str="http://rss.cnn.com/rss/cnn_world.rsstest";
str.replace(/test$/, "");