使用Javascript和正则表达式修改URL的结尾
我正在尝试清理URL(rss提要),以便在最后一个.rss(或.html)之后不再有其他字符。我正在使用w3schools.com上的TryIt编辑器进行测试。以下是我的测试代码:使用Javascript和正则表达式修改URL的结尾,javascript,regex,replace,Javascript,Regex,Replace,我正在尝试清理URL(rss提要),以便在最后一个.rss(或.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); 我遇到的问题是,显示
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
i、 e.“测试”没有被删除。我想知道是否有人可以检查我的正则表达式并解释我做错了什么
谢谢。应该是
var patt1=/(\.rss\.html)。*$/g代码>因为。是特殊字符应该是var patt1=/(\.rss\.html)。*$/g代码>因为。你为什么不这样做呢
var str="http://rss.cnn.com/rss/cnn_world.rsstest";
str.replace(/test$/, "");
你为什么不这样做
var str="http://rss.cnn.com/rss/cnn_world.rsstest";
str.replace(/test$/, "");
首先,我推荐你或其他一些测试服务。原谅
其他一些回答者似乎完全没有抓住要点,因此,为了解释您的错误:
[]
不分组它定义了一个字符类。您编写的内容实际上与单个字符匹配,即以下任意字符:|hlmrst
没有$
锚定,两个*
可能与您期望的不匹配
请尝试:
/(\.rss|\.html).*$/g
这是演示。首先,我推荐您或其他一些测试服务。原谅
其他一些回答者似乎完全没有抓住要点,因此,为了解释您的错误:
[]
不分组它定义了一个字符类。您编写的内容实际上与单个字符匹配,即以下任意字符:|hlmrst
没有$
锚定,两个*
可能与您期望的不匹配
请尝试:
/(\.rss|\.html).*$/g
这是演示。尝试使用子字符串
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);
}
尝试使用子字符串
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);
}
失去[],逃离。到\。(注意,这也将终止任何查询字符串参数…)丢失[],转义。到\。(注意,这也将终止任何查询字符串参数…“test”只是我的示例测试,理想情况下它应该替换后面的任何内容。rssb因为它可能不是“test”,它可以是任何内容。“test”只是我的示例测试,理想情况下它应该替换后面的任何内容。rssb因为它可能不是“test”,它可以是任何内容。请参见以下内容:“.”在[]@Stano中是文字化的,因为我的评论是指。是特殊字符
和op最初发布的内容
var patt1=/(.[.rss|.html]).*/g代码>。[]内的点不是特殊字符,它们由[]进行文字化。请参见:我的评论所指的[]@Stano中的“.”是文字化的,因为。是特殊字符
和op最初发布的内容var patt1=/(.[.rss|.html]).*/g代码>。[]内的点不是特殊字符,它们由[]进行文字化。编辑以消除小写或大写以及我的其他错误;-)通过比较两者的索引,您可以检查wheter.rss或html是否位于末尾,然后确定在LastIndexOff中使用的字符串有很多种剥猫皮的方法。我认为基于正则表达式的解决方案在这里更合适。不过很有趣!编辑以消除小写或大写以及我的其他错误;-)通过比较两者的索引,您可以检查wheter.rss或html是否位于末尾,然后确定在LastIndexOff中使用的字符串有很多种剥猫皮的方法。我认为基于正则表达式的解决方案在这里更合适。不过很有趣!你的回答很好,因为我和sunny一起工作,而且我们都在一起解决这个问题,我们正在寻找.rss或.html的最后一个实例,给出这个例子http://rss.cnn.com/rss/cnn_world.rss/cnn_world.rsstest
作为第二个测试,您的正则表达式并不贪婪,因此它将查找第一次迭代,而.*将意味着第二个实例将消失。有没有一种方法可以将它标记为贪婪,与相反?
@Churk-确实有。使用否定的先行断言:/(\.rss|\.html)(?!.\.rss|\.html)。*$/g
。看,你的答案很好,因为我和sunny一起工作,而且我们都在一起解决这个问题,我们正在寻找.rss或.html的最后一个实例,给出这个例子http://rss.cnn.com/rss/cnn_world.rss/cnn_world.rsstest
作为第二个测试,您的正则表达式并不贪婪,因此它将查找第一次迭代,而.*将意味着第二个实例将消失。有没有一种方法可以将它标记为贪婪,与相反?
@Churk-确实有。使用否定的先行断言:/(\.rss|\.html)(?!.\.rss|\.html)。*$/g
。看见