删除字符最后一次出现之前的所有内容


73

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

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

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

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["/"]);

2
你近了 lastIndexOf是一个函数,location如果它是全局变量,则不能覆盖。因此应该是:loc.substring(loc.lastIndexOf("/"))并且由于您不想包括斜线本身:loc.substring(loc.lastIndexOf("/") + 1)
Felix Kling

Answers:


111

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

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

这是jsfiddle中的示例,这是Mozilla开发人员网络上.lastIndexOf()方法的说明。


哦,我没注意到:)
罗兰2012年

8
这将删除最后一次出现的所有内容。OP希望删除之前的所有内容。实际上应该是location.substring(location.lastIndexOf("/") + 1)
Felix Kling

那就是我正在使用的东西,除了0里面的东西与我需要的东西相反:)
罗兰

抱歉,罗兰,我误解了您的问题,并以为您需要一切都可以。是的,只需删除0参数,您将拥有所需的内容,唯一的问题是括号不正确。
叶夫根尼·辛金

我认为Michael的答案是更好的答案,因为如果您传递的字符串中不包含“ /”,并且行将在-1处阻塞,您将遇到异常。因此,至少您要通过我的编辑进行保护...
Yevgeny Simkin 2012年

11

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

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

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

前导会^强制此正则表达式在字符串开头“匹配”匹配。所述\/单个匹配/的字符(\是保持/从混淆正则表达式分析器)。然后(.*)$匹配从/到字符串末尾的所有其他内容。首字母.*会尽可能多地吞下,包括/最后一个字母之前的字符。替换文本"$1"是一种特殊形式,表示“第一个匹配组的内容”。此正则表达式具有一个组,该组由最后一个括号.*(在中(.*)$)组成。那将是最后一个之后的所有东西/,因此总体结果是整个字符串仅被该东西替换。(如果由于没有/字符而导致模式不匹配,则不会发生任何事情。)


不,我熟悉它,我在PHP中使用它,而在JS中使用较少
Roland 2012年

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());

如果使用的是类似/path/stuff/here/结尾的网址/,则返回一个空字符串而不是here,请修改以上内容以.replace()从调用链中删除。我以为不管最后一个斜杠,您都希望最后一个组件,但可能假设不正确。

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

我认为我的解决方案更干净,但是无论如何,您都需要将该数组重新连接到“ /”上,否则最终会出现没有/的情况。
叶夫根尼·辛金

我更喜欢不使用.pop():)
罗兰2012年

@博士 Dredel OP不需要其余字符串,只需要最后一部分,因此无需将其重新连接在一起
Michael Berkowski 2012年

哦,我误解了这个问题(或者OP编辑了吗?不确定),我认为他想要一切,直到最后一个斜杠。您的方法显然可以解决上述问题。
叶夫根尼·辛金

@ Dr.Dredel我同意,要求“从中提取所有内容直至其中”存在混淆-当提取时,您通常希望保留它,但是在这种情况下,它应显示为“将所有内容删除至其中”。 。
Michael Berkowski 2012年

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

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

注意:location这是window.location,不是您的var location


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.