Javascript regular Expressions在斜杠之间切断了最后的参数

时间:2012-05-02 08:29:15

标签: javascript regex

您好我是regex的新手,无法为此找到合适的解决方案:

我想切断两个斜杠之间的网址的最后一个参数“/ 1032 /”表格网址“http://www.blablabla.com/test.php/addpage/1032/”

我刚刚http://www.blablabla.com/test.php/addpage/ ...虽然这部分并不重要但是只是切断了最后一次斜线之间的参数......

我做的是:

curr_url= "http://www.blablabla.com/test.php/addpage/1032/";
expression =/.*\/./;
alert(expression.exec(curr_url));

结果是“http://www.blablabla.com/test.php/addpage/1” 现在我可以通过切片切断最后一个参数,但这不合理我猜

有更好的解决方案吗?非常感谢!

3 个答案:

答案 0 :(得分:1)

curr_url.match(/.+(\/.+\/)$/)

[“http://www.blablabla.com/test.php/addpage/1032/”,“/ 1032 /”]

第一个贪婪的.+捕获所有持续斜线的东西然后倒退到倒数第二个,因为其余的模式会失败。 ()捕获此斜杠之间的所有内容,最后一个结尾然后\/$告诉该字符串应该在最后一个斜杠之后结束。如果您只需要数字本身,请在支架外移动斜杠。

虽然我误解了你的意图。如果你需要字符串的第一部分,你可以使用regexp建议稍微改变一下:

curr_url.match(/(.+)\/.+/)[1]

它捕获“一切直到斜线,然后再一些”。它将首先到达字符串中的最后一个斜杠,但然后返回到前一个斜杠,因为没有“那么多”,因此完全留下你想要的字符串部分。

答案 1 :(得分:1)

var parts=curr_url.split('/');

之后,您可以从阵列中获取任何部分。

答案 2 :(得分:1)

在你的表达中

/.*\/./

你需要最后一个点告诉模式在斜杠后面有一个字符,但这也是匹配的,因此在你的结果中。如果你删除它将匹配到最后一个斜线,所以没有解决方案。

但是有一种方法可以定义模式之后应该是什么,并且不匹配那些东西。它叫做look ahead assertion

所以你可以做到

/.*\/(?!$)/

(?!$)是一个负前瞻断言,意思是“仅当字符串的结尾($)没有跟随时才匹配前一个斜杠”。

curr_url= "http://www.blablabla.com/test.php/addpage/1032/";
expression =/.*\/(?!$)/;
alert(expression.exec(curr_url));

也会回复你想要的东西。