Подстрока JavaScript () обман - PullRequest
       12

Подстрока JavaScript () обман

1 голос
/ 05 сентября 2010

У меня есть 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).

Спасибо!

Джек

Ответы [ 6 ]

4 голосов
/ 05 сентября 2010

Теперь это тот случай, когда регулярные выражения будут иметь смысл. Использование подстроки здесь не будет работать из-за переменной длины строк.

В этом коде предполагается, что часть id не содержит косых черт.

var hash = "#asdfasdfid/Blah-blah-blah";
hash.match(/#(.+?)\//)[1]; // asdfasdfid
  • . будет соответствовать любому символу и
  • вместе с + одним или несколькими символами
  • ? делает совпадение нежадным, поэтому оно останавливается при первом появлении / в строке

Если часть идентификатора может содержать дополнительные косые черты, а последняя косая черта - это разделитель, то это регулярное выражение выполнит ваши заявки

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

Просто для удовольствия есть версии, не использующие регулярные выражения.

Без идентификаторов в id-части:

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

С косыми чертами в id-части (последняя косая черта - разделитель):

var hash = "#asdf/a/sdfid/Blah-blah-blah",
    lastSlash = hash.split("").reverse().indexOf("/") - 1, // Finding the last slash
    idPart = hash.substring(1, lastSlash);
1 голос
/ 05 сентября 2010
var hash = window.location.hash;
var matches = hash.match(/#(.+?)\//);
if (matches.length > 1) {
    alert(matches[1]); 
}
1 голос
/ 05 сентября 2010

возможно регулярное выражение

window.location.hash.match(/[^#\/]+/)
0 голосов
/ 05 сентября 2010

Это не хороший подход, но вы хотите использовать, если хотите ...

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 
0 голосов
/ 05 сентября 2010

Наиболее надежный способ сделать это, вероятно, следующий:

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

Этот код не предполагает ничего о том, что следует за идентификатором (если он вообще существует).Идентификатор, который он поймает, - это все, кроме слэшей и амперсандов.

Если вы хотите, чтобы он улавливал только буквы и цифры, вы можете изменить его на следующее:

function getId() {
    var m = document.location.href.match(/\/#([a-z0-9]+)/i);
    return m && m[1];
}
0 голосов
/ 05 сентября 2010

Используйте IndexOf, чтобы определить позицию идентификатора / after, а затем используйте string.substr (начало, длина), чтобы получить значение идентификатора.

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

Вам нужно включить код проверки, чтобы проверить отсутствие /

...