2010-09-05 2 views
1

У меня есть URL, который выглядит как http://mysite.com/#id/Blah-blah-blah, он используется для бит Ajax-ey. Я хочу использовать substring() или substr(), чтобы получить часть id. ID может быть любой комбинацией любой длины букв и цифр.Javascript подстрока() trickery

До сих пор я получил:

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

который удаляет передний хэш, но я не кодер JS, и я изо всех сил немного. Как я могу удалить все это, кроме части id? Я не хочу ничего после и включая финальную косую черту (/Blah-blah-blah).

Спасибо!

Джек

ответ

4

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

Этот код предполагает, что идентификационная часть не содержит никаких косых черт.

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

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

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

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

Нет косые в Ид части:

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

С косой черты в Ид части (последний слэш сепаратор):

var hash = "#asdf/a/sdfid/Blah-blah-blah", 
    lastSlash = hash.split("").reverse().indexOf("/") - 1, // Finding the last slash 
    idPart = hash.substring(1, lastSlash); 
+1

Это должно быть '[1]', так как вы хотите захваченную группу. –

+0

Только что понял, что :) – adamse

+0

Отлично, полнофункциональный ответ, спасибо adamse! – Jack

1

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

window.location.hash.match(/[^#\/]+/) 
+1

Это регулярное выражение будет соответствовать только 1 символу. – adamse

0

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

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

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

+0

@Erik, не используется * 'подстрока'. Второй параметр ['substr'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substr) - это длина, поэтому это верно. –

1
var hash = window.location.hash; 
var matches = hash.match(/#(.+?)\//); 
if (matches.length > 1) { 
    alert(matches[1]); 
} 
0

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

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

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

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

function getId() { 
    var m = document.location.href.match(/\/#([a-z0-9]+)/i); 
    return m && m[1]; 
} 
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 
Смежные вопросы