2016-01-22 2 views
1

Я пытаюсь извлечь набор чисел из URL-адреса. Строка между словом «область» и словом «все». URL-адрес является: http://my.site.com/theme/feature/region/227-84/all/country-southИзвлечь числа между двумя шаблонами javascript

Регулярное выражение, которое я построил это:

var tmp = $(this).attr('link').match("(?=region/).*?(?=/all)"); 

Регулярное выражение извлекает правильную часть цифр, но всегда торчит область номерам поэтому извлекаемая строка стала:

"region/227-84" 

в то время как я wannt получить только номера:

"227-84" 
+0

удалить lookaheads и использовать захват группы. –

+0

'match' возвращает массив, не так ли? Так что вы не можете выполнить 'match (...) [1]'? – mariocatch

ответ

1

Он включает подстроку «region /», потому что положительный lookahead (?=region\/) соответствует персонажу до «region /». Так как JavaScript не имеет просмотра назад, самый простой вариант будет удалить lookaheads и использовать группу захвата для того, чтобы извлечь среднюю часть:

/region\/([^\/]*)\/all/ 

или если есть косая черта между узорами:

/region\/(.*?)\/all/ 

Использование:

var match = $(this).attr('link').match(/region\/([^\/]*)\/all/); 
var result = match ? match[1] : null; 

console.log(result); // "227-84" 

Если есть совпадение, метод .match() возвращает массив. В этом случае было бы вернуть:

["region/227-84/all", "227-84"] // match 

Первая группа записи имеет индекс одного (то есть, match ? match[1] : null). В этом случае тернарный оператор просто используется для проверки того, действительно ли было совпадение перед доступом к массиву (иначе ошибка была бы выбрана, если не было соответствия).

+0

Сокращение указанного решения в одной строке путем добавления ключа массива к исходному регулярному выражению: var match = $ (this) .attr ('link'). Match ("/ region \/(. *?) \/All /") [1]; – ronline

0

Если вы уже знаете, что размер строки вы ищете вы можете сделать это:

......(?=\/all) 
Смежные вопросы