Разобрать значения из параметризованных строк в JavaScript - PullRequest
3 голосов
/ 31 января 2011

Скажите, у меня есть строка, например:

var map = "/directory/:id/thumbnails/:size";

И я хочу использовать это для сопоставления с другой строкой (по сути, то же самое, что Rails использует для определения маршрутов), например:

var str = "/directory/10/thumbnails/large";

Я хотел бы "сравнить" две строки и вернуть пару ключ-значение или объект JSON, представляющий части str, которые отображаются на map, что в моем примере выше выглядело бы следующим образом: 1009 *

obj = {
    'id'   : '10',
    'size' : 'large'
}

Подойдет ли это для JavaScript Regex? Кто-нибудь может мне помочь?

1 Ответ

2 голосов
/ 31 января 2011

Мне было проще просто написать код для этого, чем объяснить:)

var map = "/directory/:id/thumbnails/:size";
var str = "/directory/10/thumbnails/large";

var obj = {};

var mapArr = map.split('/');
var strArr = str.split('/');

if (mapArr.length != strArr.length) return false;

for (var i = 0; i < mapArr.length; i++)
{
    var m = mapArr[i];
    var s = strArr[i];

    if (m.indexOf(":") != 0) continue;

    m = m.substring(1);    
    obj[m] = s;
    document.write(m + " = ");
    document.write(obj[m]);
    document.write("<br/>");
}

Вы также можете увидеть это в действии здесь => http://jsfiddle.net/5qFkb/

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...