2014-12-04 3 views
2

СценарияРаспаковка пути URL-адрес с помощью регулярных выражений

Я хочу, чтобы извлечь строку пути из document.location, за исключением лидирующего слеша. Так, например, если URL является:

http://stackoverflow.com/questions/ask 

Я хотел бы получить:

questions/ask 

Это должно быть просто:

/* group everything after the leading slash */ 
var re = /\/(.+)/gi; 
var matches = document.location.pathname.match(re); 
console.log(matches[0]); 

Но если я запускаю этот фрагмент кода в консоли Firebug , Я все еще получаю ведущую косую черту. Я уже тестировал regexp, а механизм регулярного выражения правильно извлекает группу.

Вопрос

Как правильно получить строку группы 1?

ответ

1

Вы говорите, завершающие или слэш? С вашего поста это выглядит как косая черта.

document.location.pathname.replace(/^\//,"") 

Кстати, ваше регулярное выражение является правильным, но вам просто нужно удалить gi и читать matches[1] вместо matches[0], потому что matches[0] целая строка соответствует регулярному выражению, в то время как matches[1] является захвачена часть в найденной строке (цитата с скобками в регулярном выражении).

var matches = document.location.pathname.match(/\/(.+)/); 
console.log(matches); // ["https://stackoverflow.com/questions/ask", "questions/ask"] 
+0

Правильно, я имею в виду ведущую косую черту. Вопрос отредактирован. –

2

Вам не нужны регулярные выражения, если вы просто хотите получить имя пути без косой черты. Поскольку location.pathname всегда начинается с / вы можете просто взять подстроку из первого индекса:

document.location.pathname.substr(1) // or .slice(1) 
+0

Совершенный ответ KISS. –

1

Использование регулярных выражений вы можете сделать:

var m = 'http://stackoverflow.com/questions/ask'.match(/\/{2}[^\/]+(\/.+)/); 
console.log(m[1]); /questions/ask