1

我有一个看起来像 的 URL http://mysite.com/#id/Blah-blah-blah,它用于 Ajax-ey 位。我想使用substring()substr()获得id零件。ID可以是任意长度的字母和数字的任意组合。

到目前为止,我得到了:

var hash = window.location.hash;
alert(hash.substring(1)); // remove #

它删除了前面的哈希,但我不是 JS 编码器,我有点挣扎。我怎样才能删除除id部分之外的所有内容?我也不想要任何东西,包括最后的斜线(/Blah-blah-blah)。

谢谢!

杰克

4

6 回答 6

4

现在,这是正则表达式有意义的情况。由于字符串的长度可变,在此处使用子字符串将不起作用。

此代码将假定 id 部分不包含任何斜杠。

var hash = "#asdfasdfid/Blah-blah-blah";
hash.match(/#(.+?)\//)[1]; // asdfasdfid
  • .匹配任何字符和
  • 连同+一个或多个字符
  • 使?匹配非贪婪,因此它将/在字符串中第一次出现 a 时停止

如果 id 部分可以包含额外的斜杠并且最后的斜杠是分隔符,则此正则表达式将执行您的出价

var hash = "#asdf/a/sdfid/Blah-blah-blah";
hash.match(/#(.+?)\/[^\/]*$/)[1]; // asdf/a/sdfid

只是为了好玩,这里是不使用正则表达式的版本。

id-part 中没有斜杠:

var hash = "#asdfasdfid/Blah-blah-blah",
    idpart = hash.substr(1, hash.indexOf("/"));

在 id-part 中使用斜杠(最后一个斜杠是分隔符):

var hash = "#asdf/a/sdfid/Blah-blah-blah",
    lastSlash = hash.split("").reverse().indexOf("/") - 1, // Finding the last slash
    idPart = hash.substring(1, lastSlash);
于 2010-09-05T08:43:45.310 回答
1

也许是一个正则表达式

window.location.hash.match(/[^#\/]+/)
于 2010-09-05T08:42:58.053 回答
1
var hash = window.location.hash;
var matches = hash.match(/#(.+?)\//);
if (matches.length > 1) {
    alert(matches[1]); 
}
于 2010-09-05T08:47:19.227 回答
0

使用 IndexOf 确定 id 之后 / 的位置,然后使用 string.substr(start,length) 获取 id 值。

var hash = window.location.hash;
var posSlash = hash.indexOf("/", 1);
var id = hash.substr(1, posSlash -1)

您需要包含一些验证代码来检查是否缺少 /

于 2010-09-05T08:46:04.800 回答
0

最万无一失的方法可能如下:

function getId() {
    var m = document.location.href.match(/\/#([^\/&]+)/);
    return m && m[1];
}

此代码不假设任何关于 id 之后的内容(如果有的话)。它将捕获的 id 是除正斜杠和 & 符号之外的任何内容。

如果您希望它只捕获字母和数字,您可以将其更改为以下内容:

function getId() {
    var m = document.location.href.match(/\/#([a-z0-9]+)/i);
    return m && m[1];
}
于 2010-09-05T08:52:19.963 回答
0

这不是一个好的方法,但如果你愿意,你想使用......

var relUrl = "http://mysite.com/#id/Blah-blah-blah";
var urlParts = [];
urlParts = relUrl.split("/"); // array is 0 indexed, so 
var idpart = = urlParts[3] // your id will be in 4th element
id = idpart.substring(1) //we are skipping # and read the rest 
于 2010-09-05T08:59:33.287 回答