我需要用URL中的哈希替换斜杠。其他一切都保持不变。
例如: -
这个:
www.example.com/main/events/event-1
需要更改为:
www.example.com/main/events#event-1
(jQuery解决方案是最佳的,插件OK)
根据OP的评论进行更新:
使用此代码:
function outputStatus(e)
{
if (e.success && $.url.segment(1) == 'events')
{
// IF Flash SWF loads success AND on events page
var url = $.url.attr('source'); // gets current URL
var new_url = url.replace(/\/([^\/]+)$/, "#$1"); // replaces last slash with a hash
window.location = new_url; // sets the current URL to the new URL
}
}
网址已更改两次(因此www.example.com/main/events/event-1
正变为www.example.com/main/events#event-1
,然后变为www.example.com/main#events#event-1
。
答案 0 :(得分:5)
不需要jQuery,Javascript具有本机字符串替换方法。
var url = "www.example.com/main/events/event-1"
var new_url = url.replace(/\/([^\/]+)$/, "#$1");
alert(new_url);
/\/([^\/]+)$/
将匹配最后一个斜杠及其后的所有内容,直到字符串结束。第二个参数中的$1
是模式中创建的组的backreference(包含最终斜杠后的所有内容)。 Try it out!
<强>更新强>
我的猜测是你的outputStatus
函数被多次调用,因此被多次替换。您可以先检查网址中是否存在#
来避免这种情况:
if (url.indexOf('#') == -1) // # is not found
{
var new_url = url.replace(/\/([^\/]+)$/, "#$1");
}
如果找到值, String#indexOf
将返回一个位置,如果没有,则返回-1。
或者(因为您似乎正在使用jQuery URL Parser,对吗?),您可以在修改$.url.attr('anchor')
变量之前检查是否存在url
。
答案 1 :(得分:1)
试试这个:
var str = "www.example.com/main/events/event-1";
var idx = str.lastIndexOf('/');
var res = str.substr(0,idx) + '#' + str.substr(idx + 1);
或者这个:
var str = "www.example.com/main/events/event-1"
var res = str.replace(/\/([^/]+)$/,'#$1');