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

ee7vknir  于 2023-01-29  发布在  Java
关注(0)|答案(6)|浏览(128)

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

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

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

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

elcex8rz1#

你的想法是对的,只要把括号换成圆括号就行了。

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

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

3z6pesqy

3z6pesqy2#

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

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

如果您熟悉正则表达式(如果不熟悉:-,您应该熟悉),那么它就不会像不熟悉时那样陌生。
前导^强制此正则表达式将匹配“锚”在字符串的开头。\/匹配单个/字符(\是为了防止/混淆正则表达式解析器)。然后(.*)$匹配从/到字符串末尾的所有内容。初始的.*将尽可能多地吸收,包括最后一个字符之前的/个字符。替换文本"$1"是一种特殊形式,表示“第一个匹配组的内容”。此正则表达式有一个组,由最后一个.*前后的括号形成(在(.*)$中)。这将是最后一个/之后的所有内容,因此,总的结果是整个字符串被替换为这些内容(如果由于没有/字符而导致模式不匹配,则什么也不会发生)。

7xzttuei

7xzttuei3#

将字符串拆分为/上的数组和.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());
11dmarpk

11dmarpk4#

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

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

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

of1yzvn4

of1yzvn45#

为了知道哪一个最快,我创建了一个小的基准测试。regex是最慢的解决方案,使用substringslicelastIndexOf严格地比splitpopat快。
因此用途:

loc.substring(loc.lastIndexOf("/") + 1);

完整结果:

Try it online!

rseugnpd

rseugnpd6#

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

相关问题