在最后一个字符出现之前删除所有内容

我试图对string执行以下操作:

  • find最后一次出现的字符"/" ;
  • 除去那个angular色之前的一切;
  • 返回string的剩余部分;

为了更明确,让我们说我有以下string:

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

你有正确的想法,用括号replace括号。

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

这里是jsfiddle中的一个例子,这里是对Mozilla开发者networking上的.lastIndexOf()方法的解释。

我个人会使用一个正则expression式:

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

如果你熟悉正则expression式(你应该是,如果不是:-),那么它就不像外表那样陌生。

前面的^强制这个正则expression式在string的开始处“锚定”匹配。 \/匹配单个/字符( \是为了避免混淆正则expression式parsing器)。 然后(.*)$匹配从/到string结尾的所有其他内容。 最初的.*会尽可能地吞噬,包括最后一个之前的字符。 replace文本"$1"是一种特殊的forms,意思是“第一个匹配组的内容”。 这个正则expression式有一个组,由最后一个括号组成.* (in (.*)$ )。 这将是最后一个之后的所有东西,所以总体结果是整个string被replace为那些东西。 (如果模式不匹配,因为没有任何/字符,则什么都不会发生。)

将string拆分为最后一个元素的/.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/这样的URL存在尾部/ ,如果这种情况应该返回一个空string,而不是here ,请修改上述以从调用链中删除.replace() 。 我以为你会想要最后一个组件,不pipe是否有斜线,但可能错误地认为。

 console.log(locationstring.split('/').pop()); 
  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);