在最后一个字符出现之前删除所有内容
我试图对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"
注意:这里的location
是window.location
,而不是你的var location
。
var string = "/Roland/index.php"; var result = string.substring(0, string.lastIndexOf("/") + 0);