在角色最后出现之前删除所有内容

我试图对一个字符串执行以下操作:

  • 查找字符 "/"的最后出现位置;
  • 除去那个角色之前的一切;
  • 返回字符串的剩余部分;

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

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["/"]);
72174 次浏览

在最后一个元素的 /.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());

如果在像 /path/stuff/here/这样的 URL 中,您有后面的 /,如果那种情况应该返回一个空字符串而不是 here,那么修改上面的内容以从调用链中删除 .replace()。我假设您希望使用最后一个组件,而不用考虑尾部的斜杠,但这种假设可能是错误的。

console.log(locationstring.split('/').pop());

你有一个正确的想法,就是用括号替换括号。

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

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

就我个人而言,我会使用一个正则表达式:

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

如果你熟悉正则表达式(如果不熟悉的话,你应该熟悉: ——) ,那么它看起来就不像不熟悉正则表达式时那么陌生了。

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

    var result = /\/([^\/]*)$/.exec(location)[1];


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

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

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