0

嗨,我是正则表达式的新手,找不到合适的解决方案:

我想截断两个斜杠“/1032/”之间的url的最后一个参数,形成url“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”现在我可以将最后一个参数剪掉,但我猜这不合理

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

4

3 回答 3

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

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

于 2012-05-02T08:37:37.027 回答
1
curr_url.match(/.+(\/.+\/)$/)

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

首先贪心.+将所有内容捕获到最后一个斜线,然后退回到倒数第二个,因为否则模式的其余部分将失败。() 捕获此斜杠和最后一个 then 之间的所有内容,然后\/$告诉字符串应该在最后一个斜杠之后结束。如果您只想要数字本身,请将斜杠移到括号外。

看来我误解了你的意图。如果您需要字符串的第一部分,您可以使用下面建议的正则表达式并稍作改动:

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

它捕获“直到斜线的所有内容,然后再捕获更多”。它将首先到达字符串中的最后一个斜杠,然后返回到上一个斜杠,因为没有“然后再多一些”,因此恰好留下了您想要的字符串部分。

于 2012-05-02T08:32:04.390 回答
1

在你的表情中

/.*\/./

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

但是有一种方法可以定义模式之后应该是什么,而不是匹配那些东西。它称为前瞻断言

所以你可以做

/.*\/(?!$)/

并且(?!$)是一个否定的前瞻断言,这意味着“仅当字符串的结尾 (the $) 没有跟随时才匹配前一个斜杠”。

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

也会返回你想要的。

于 2012-05-02T08:57:28.657 回答