2015-04-29 2 views
0

В настоящее время я использую Modenizr, чтобы определить, какую ссылку обслуживать пользователей на основе их выбранного устройства. Поэтому, если они используют мобильное устройство, я хочу вернуть URI, если нет, то просто верните традиционный URL.Использование Regex для разбора URI

URI:spotify:album:1jcYwZsN7JEve9xsq9BuUX

URL:https://open.spotify.com/album/1jcYwZsN7JEve9xsq9BuUX

Сейчас я использую slice() для получения последних 22 символов в URI. Хотя он работает, я хотел бы проанализировать строку через регулярное выражение в том случае, если URI превышает указанную сумму символа. Каким будет лучший способ получить строку символов после второго двоеточия URI?

$(".spotify").attr("href", function(index, value) { 
    if (Modernizr.touch) { 
    return value 
    } else { 
    return "https://open.spotify.com/album/" + value.slice(-22); 
    } 
}); 

ответ

0

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

/[\w\:]*\:(\w+)/ 

Как это работает

[\w\:]* Получит все символы слова (буквы, цифры, подчеркивание) и двоеточия

\: В основном скажите предыдущей вещи остановиться в двоеточии. Regex по умолчанию жадный, это означает, что он получит последнее двоеточие

(\w+) будет выбрать все символы слова и сохранить его в группе, поэтому мы можем получить доступ к нему


Используй это как:

var string = 'spotify:album:1jcYwZsN7JEve9xsq9BuUX', 
    parseduri = string.match(/[\w\:]*\:(\w+)/)[1]; 

parseduri является результатом


И тогда вы можете наконец-то совместить это:

var url = 'https://open.spotify.com/album/'+parseduri; 
+0

Что означает '[1]' в конце представления? –

+0

@CarlEdwards RegEx возвращает массив '[" spotify: album: 1jcYwZsN7JEve9xsq9BuUX "," 1jcYwZsN7JEve9xsq9BuUX "]', поэтому '[1]' используется для выбора правильного элемента в массиве. Массивы начинаются с 0 – Downgoat

+0

Требуется ли для этого примера, что 'string' стоит отдельно как одна строка против и массив URI? Интересно, что я отпустил «[1]», и это, казалось, сработало. –

1

Я хотел бы что-то подобное с использованием раскола.

var url = 'spotify:album:1jcYwZsN7JEve9xsq9BuUX'.split(':');  
var part = url[url.length-1]; 
// alert(part); 

return "https://open.spotify.com/album/" + part; 
Смежные вопросы