Я пытаюсь что-то очистить, черт возьми, и ищу какие-то лучшие способы сделать это. Идея состоит в том, что вместо использования регулярных выражений в моих правилах для синтаксического анализа строки, я хотел бы использовать что-то ближе к синтаксису маршрутов "thing /: searchitem / somethingelse ", а затем дать строку типа" /thing / FOUNDIT /thingelse " "вы получите результат" FOUNDIT ".
Вот пример, который я рефакторинг:
С учетом входной строки произнесите «http://claimid.com/myusername".. Я хочу иметь возможность запустить эту строку для нескольких возможных совпадений, а затем вернуть« myusername »для того, которое совпадает.
Данные для запуска могут выглядеть так:
PROVIDERS = [
"http://openid.aol.com/:username",
"http://:username.myopenid.com",
"http://claimid.com/:username",
"http://:username.livejournal.com"]
something_here("http://claimid.com/myusername") # => "myusername"
Есть ли хороший способ сопоставить строку, подобную http://claimid.com/myusername
, с этим списком и понять смысл результатов? Или какие-нибудь методы, чтобы сделать что-то подобное легче? Я просматривал код маршрутизации rails, как он делает что-то вроде этого, но это не самый простой код для подражания.
Сейчас я просто делаю это с помощью регулярных выражений, но кажется, что приведенный выше метод будет НАМНОГО проще читать
PROVIDERS = [
/http:\/\/openid.aol.com\/(\w+)/,
/http:\/\/(\w+).myopenid.com/,
/http:\/\/(\w+).livejournal.com/,
/http:\/\/flickr.com\/photos\/(\w+)/,
/http:\/\/technorati.com\/people\/technorati\/(\w+)/,
/http:\/\/(\w+).wordpress.com/,
/http:\/\/(\w+).blogspot.com/,
/http:\/\/(\w+).pip.verisignlabs.com/,
/http:\/\/(\w+).myvidoop.com/,
/http:\/\/(\w+).pip.verisignlabs.com/,
/http:\/\/claimid.com\/(\w+)/]
url = "http://claimid.com/myusername"
username = PROVIDERS.collect { |provider|
url[provider, 1]
}.compact.first