将URL中倒数第二个“/”字符替换为“#”。

5

我有这个URL:

http://localhost:8888/alain-pers/fr/oeuvres/architecture/

我想要将倒数第二个/替换为#(我需要最后一个/),并获得以下输出结果:
http://localhost:8888/alain-pers/fr/oeuvres#architecture/

我已经尝试了很多使用 indexOf()lastIndexOf()substr() 的方法,但我没能得到想要的结果。任何正则表达式的解决方案都不能正常工作。
请注意有时链接也会像这样带有一个 -
http://localhost:8888/alain-pers/fr/oeuvres/art-contemporain/
5个回答

4
以下正则表达式将捕获最后一个斜杠符号之前的斜杠符号:/
.*(\/).*?\/$

演示

你的 JavaScript 代码应该是这样的:

var s ='http://localhost:8888/alain-pers/fr/oeuvres/architecture/';
var r = s.replace(/(.*)(\/)(.*?\/$)/, "$1#$3");
//=>http://localhost:8888/alain-pers/fr/oeuvres#architecture/

+1,做得很好,演示也很清晰。 :) 已修正一个小错误。 - zx81

4
您可以使用基于前瞻的正则表达式:

var s ='http://localhost:8888/alain-pers/fr/oeuvres/architecture/';
var r = s.replace(/\/(?=[^/]*\/[^/]*$)/, '#');
//=> http://localhost:8888/alain-pers/fr/oeuvres#architecture/

1
@AvinashRaj:打开你的浏览器控制台,将代码原样粘贴进去。或者使用JSFiddleJSBinjs.doCodePen或类似的网站。 - Amal Murali
只需按下 ctrl-shift-C 即可打开 Firebug 或开发者工具控制台,可以实时测试任何 JavaScript 代码。 - anubhava

3

试试这个:

var output = input.replace(/\/([^\/]+\/[^\/]*)$/, "#$1" )

/*
input => "http://localhost:8888/alain-pers/fr/oeuvres/architecture/"
output => "http://localhost:8888/alain-pers/fr/oeuvres#architecture/" 
*/

// 用于单行注释,/* */ 用于多行注释 :) - gp.
是的,我以为它只适用于 CSS。 - Amit Joki

1
这个怎么样: /(\/)([\w-]+\/$)/。它与编程有关,保留了HTML标记,没有解释。
    "http://localhost:8888/alain-pers/fr/oeuvres/architecture/"
     .replace(/(\/)(\w+\/$)/,"#$2"); 
//outputs "http://localhost:8888/alain-pers/fr/oeuvres#architecture/"

如果输入为 http://localhost:8888/alain-pers/fr/oeuvres/archi-tecture/,则无法正常工作。 - anubhava

1
你可以这样做:
var str = "http://localhost:8888/alain-pers/fr/oeuvres/architecture/";
str = str.replace(/\/(\w+)(\/)?$/,"#$1$2");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接