79

我正在尝试对字符串执行以下操作:

  • 查找字符的最后一次出现"/"
  • 删除该字符之前的所有内容;
  • 返回字符串的剩余部分;

更明确地说,假设我有以下字符串:

var string = "/Roland/index.php"; // Which is a result of window.location.pathname

现在我需要从中提取除实际页面之外的所有内容,如下所示:

var result = "index.php" // Which is what I need to be returned

当然,这只是一个例子,因为显然我会有不同的页面,但同样的原则适用。

我想知道是否有人可以帮助我解决它。我尝试了接下来的操作,但没有成功:

var location = window.location.pathname;
var result = location.substring(location.lastIndexOf["/"]);
4

5 回答 5

120

您有正确的想法,只需用括号替换括号即可。

var string = "/Roland/index.php";
var result = string.substring(string.lastIndexOf("/") + 1);

这是jsfiddle中的一个示例,这里是Mozilla Developer Network上 .lastIndexOf() 方法的解释。

于 2012-05-26T16:10:10.583 回答
13

我个人会使用正则表达式:

var result = string.replace(/^.*\/(.*)$/, "$1");

如果您熟悉正则表达式(如果不熟悉,您应该熟悉 :-),那么它就不会像不熟悉时那样陌生。

前导^强制此正则表达式将匹配“锚定”在字符串的开头。\/匹配单个/字符(这是\为了/避免混淆正则表达式解析器)。然后(.*)$匹配从/字符串到结尾的所有内容。首字母.*将尽可能多地吞噬,包括/最后一个之前的字符。替换文本 ,"$1"是一种特殊形式,表示“第一个匹配组的内容”。这个正则表达式有一个组,由最后一个.*(in (.*)$) 周围的括号组成。这将是最后一次之后的所有内容/,所以总体结果是整个字符串被替换为那些东西。/(如果由于没有任何字符而导致模式不匹配,则不会发生任何事情。)

于 2012-05-26T16:10:34.390 回答
10

将字符串拆分为一个数组/.pop()上下一个元素。请注意,如果有斜杠,您首先需要去掉斜杠。

var locationstring = window.location.pathname;
// replace() the trailing / with nothing, split on the remaining /, and pop off the last one
console.log(locationstring.replace(/\/$/, "").split('/').pop());

如果在 URL 的情况下,如果/path/stuff/here/您有尾随/,如果这种情况应该返回一个空字符串而不是here,请修改上述内容以.replace()从调用链中删除 。我假设您会想要最后一个组件,而不管尾部斜杠如何,但可能错误地假设了。

console.log(locationstring.split('/').pop());
于 2012-05-26T16:09:51.930 回答
2
    var result = /\/([^\/]*)$/.exec(location)[1];

//"remove-everything-before-the-last-occurrence-of-a-character#10767835"

注意:location这里是window.location,而不是你的var location.

于 2012-05-26T16:17:11.670 回答
-1
var string = "/Roland/index.php";
var result = string.substring(0, string.lastIndexOf("/") + 0);
于 2016-12-13T04:54:17.820 回答