Skip to content

Instantly share code, notes, and snippets.

@selwin
Created December 4, 2012 00:46
Show Gist options
  • Save selwin/4199468 to your computer and use it in GitHub Desktop.
Save selwin/4199468 to your computer and use it in GitHub Desktop.
Regex patterns from ua-parser
{
"device_parsers": [
{
"device_replacement": "HTC $1",
"regex": "HTC ([A-Z][a-z0-9]+) Build"
},
{
"device_replacement": "HTC $1",
"regex": "HTC ([A-Z][a-z0-9 ]+) \\d+\\.\\d+\\.\\d+\\.\\d+"
},
{
"device_replacement": "HTC Touch ($1)",
"regex": "HTC_Touch_([A-Za-z0-9]+)"
},
{
"device_replacement": "HTC $1 (US Cellular)",
"regex": "USCCHTC(\\d+)"
},
{
"device_replacement": "HTC $1 (Sprint)",
"regex": "Sprint APA(9292)"
},
{
"device_replacement": "HTC $1",
"regex": "HTC ([A-Za-z0-9]+ [A-Z])"
},
{
"device_replacement": "HTC $1",
"regex": "HTC-([A-Za-z0-9]+)"
},
{
"device_replacement": "HTC $1",
"regex": "HTC_([A-Za-z0-9]+)"
},
{
"device_replacement": "HTC $1",
"regex": "HTC ([A-Za-z0-9]+)"
},
{
"device_replacement": "HTC $1",
"regex": "(ADR[A-Za-z0-9]+)"
},
{
"regex": "(HTC)"
},
{
"device_replacement": "Samsung SGHi560",
"regex": "(SamsungSGHi560)"
},
{
"device_replacement": "Ericsson $1",
"regex": "SonyEricsson([A-Za-z0-9]+)/"
},
{
"regex": "Android[\\- ][\\d]+\\.[\\d]+\\; [A-Za-z]{2}\\-[A-Za-z]{2}\\; WOWMobile (.+) Build"
},
{
"regex": "Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+; [A-Za-z]{2}\\-[A-Za-z]{2}\\; (.+) Build"
},
{
"regex": "Android[\\- ][\\d]+\\.[\\d]+\\-update1\\; [A-Za-z]{2}\\-[A-Za-z]{2}\\; (.+) Build"
},
{
"regex": "Android[\\- ][\\d]+\\.[\\d]+\\; [A-Za-z]{2}\\-[A-Za-z]{2}\\; (.+) Build"
},
{
"regex": "Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+; (.+) Build"
},
{
"device_replacement": "Nokia N$1",
"regex": "NokiaN([0-9]+)"
},
{
"device_replacement": "Nokia $1",
"regex": "Nokia([A-Za-z0-9\\v-]+)"
},
{
"device_replacement": "Nokia $1",
"regex": "NOKIA ([A-Za-z0-9\\-]+)"
},
{
"device_replacement": "Nokia $1",
"regex": "Nokia ([A-Za-z0-9\\-]+)"
},
{
"device_replacement": "Lumia $1",
"regex": "Lumia ([A-Za-z0-9\\-]+)"
},
{
"device_replacement": "Nokia",
"regex": "Symbian"
},
{
"device_replacement": "Blackberry Playbook",
"regex": "(PlayBook).+RIM Tablet OS"
},
{
"regex": "(Black[Bb]erry [0-9]+);"
},
{
"device_replacement": "BlackBerry $1",
"regex": "Black[Bb]erry([0-9]+)"
},
{
"device_replacement": "Palm Pre",
"regex": "(Pre)/(\\d+)\\.(\\d+)"
},
{
"device_replacement": "Palm Pixi",
"regex": "(Pixi)/(\\d+)\\.(\\d+)"
},
{
"device_replacement": "HP Touchpad",
"regex": "(Touchpad)/(\\d+)\\.(\\d+)"
},
{
"device_replacement": "HP iPAQ $1",
"regex": "HPiPAQ([A-Za-z0-9]+)/(\\d+).(\\d+)"
},
{
"device_replacement": "Palm $1",
"regex": "Palm([A-Za-z0-9]+)"
},
{
"device_replacement": "Palm Treo $1",
"regex": "Treo([A-Za-z0-9]+)"
},
{
"device_replacement": "HP Veer",
"regex": "webOS.*(P160UNA)/(\\d+).(\\d+)"
},
{
"regex": "(PlayStation Portable)"
},
{
"regex": "(PlayStation Vita)"
},
{
"regex": "(Kindle Fire)"
},
{
"regex": "(Kindle)"
},
{
"device_replacement": "Kindle Fire",
"regex": "(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?"
},
{
"device_replacement": "AppleTV",
"regex": "(AppleTV)"
},
{
"regex": "(iPad) Simulator;"
},
{
"regex": "(iPad);"
},
{
"regex": "(iPod);"
},
{
"regex": "(iPhone) Simulator;"
},
{
"regex": "(iPhone);"
},
{
"device_replacement": "Acer $1",
"regex": "acer_([A-Za-z0-9]+)_"
},
{
"device_replacement": "Acer $1",
"regex": "acer_([A-Za-z0-9]+)_"
},
{
"device_replacement": "Amoi $1",
"regex": "Amoi\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "Amoi $1",
"regex": "AMOI\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "Asus $1",
"regex": "Asus\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "Asus $1",
"regex": "ASUS\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "Bird $1",
"regex": "BIRD\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "Bird $1",
"regex": "BIRD\\.([A-Za-z0-9]+)"
},
{
"device_replacement": "Bird $1",
"regex": "BIRD ([A-Za-z0-9]+)"
},
{
"device_replacement": "Dell $1",
"regex": "Dell ([A-Za-z0-9]+)"
},
{
"device_replacement": "DoCoMo $1",
"regex": "DoCoMo/2\\.0 ([A-Za-z0-9]+)"
},
{
"device_replacement": "DoCoMo $1",
"regex": "([A-Za-z0-9]+)_W\\;FOMA"
},
{
"device_replacement": "DoCoMo $1",
"regex": "([A-Za-z0-9]+)\\;FOMA"
},
{
"device_replacement": "Huawei Vodafone $1",
"regex": "vodafone([A-Za-z0-9]+)"
},
{
"device_replacement": "i-mate $1",
"regex": "i\\-mate ([A-Za-z0-9]+)"
},
{
"device_replacement": "Kyocera $1",
"regex": "Kyocera\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "Kyocera $1",
"regex": "KWC\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "Lenovo $1",
"regex": "Lenovo\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "Lenovo $1",
"regex": "Lenovo_([A-Za-z0-9]+)"
},
{
"device_replacement": "LG $1",
"regex": "LG/([A-Za-z0-9]+)"
},
{
"device_replacement": "LG $1",
"regex": "LG-LG([A-Za-z0-9]+)"
},
{
"device_replacement": "LG $1",
"regex": "LGE-LG([A-Za-z0-9]+)"
},
{
"device_replacement": "LG $1",
"regex": "LGE VX([A-Za-z0-9]+)"
},
{
"device_replacement": "LG $1",
"regex": "LG ([A-Za-z0-9]+)"
},
{
"device_replacement": "LG $1",
"regex": "LGE LG\\-AX([A-Za-z0-9]+)"
},
{
"device_replacement": "LG $1",
"regex": "LG\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "LG $1",
"regex": "LGE\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "LG $1",
"regex": "LG([A-Za-z0-9]+)"
},
{
"device_replacement": "Microsoft $1",
"regex": "(KIN)\\.One (\\d+)\\.(\\d+)"
},
{
"device_replacement": "Microsoft $1",
"regex": "(KIN)\\.Two (\\d+)\\.(\\d+)"
},
{
"regex": "(Motorola)\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "Motorola $1",
"regex": "MOTO\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "Motorola $1",
"regex": "MOT\\-([A-Za-z0-9]+)"
},
{
"device_replacement": "Philips $1",
"regex": "Philips([A-Za-z0-9]+)"
},
{
"device_replacement": "Philips $1",
"regex": "Philips ([A-Za-z0-9]+)"
},
{
"device_replacement": "Samsung $1",
"regex": "SAMSUNG-([A-Za-z0-9\\-]+)"
},
{
"device_replacement": "Samsung $1",
"regex": "SAMSUNG\\; ([A-Za-z0-9\\-]+)"
},
{
"device_replacement": "Softbank $1",
"regex": "Softbank/1\\.0/([A-Za-z0-9]+)"
},
{
"device_replacement": "Softbank $1",
"regex": "Softbank/2\\.0/([A-Za-z0-9]+)"
},
{
"device_replacement": "Playstation 3",
"regex": "(PlayStation3 PPC)"
},
{
"device_replacement": "Generic Smartphone",
"regex": "(hiptop|avantgo|plucker|xiino|blazer|elaine|up.browser|up.link|mmp|smartphone|midp|wap|vodafone|o2|pocket|mobile|pda)"
},
{
"device_replacement": "Generic Feature Phone",
"regex": "^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a wa|acer|acs\\-|airn|alav|asus|attw|au\\-m|aur |aus |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bell|bird|bw\\-n|bw\\-u|beck|benq|bilb|blac|c55/|cdm\\-|chtm|capi|comp|cond|craw|dall|dbte|dc\\-s|dica|ds\\-d|ds12|dait|devi|dmob|doco|dopo|el49|erk0|esl8|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly\\-|fly_|g\\-mo|g1 u|g560|gf\\-5|grun|gene|go.w|good|grad|hcit|hd\\-m|hd\\-p|hd\\-t|hei\\-|hp i|hpip|hs\\-c|htc |htc\\-|htca|htcg)"
},
{
"device_replacement": "Generic Feature Phone",
"regex": "^(htcp|htcs|htct|htc_|haie|hita|huaw|hutc|i\\-20|i\\-go|i\\-ma|i230|iac|iac\\-|iac/|ig01|im1k|inno|iris|jata|java|kddi|kgt|kgt/|kpt |kwc\\-|klon|lexi|lg g|lg\\-a|lg\\-b|lg\\-c|lg\\-d|lg\\-f|lg\\-g|lg\\-k|lg\\-l|lg\\-m|lg\\-o|lg\\-p|lg\\-s|lg\\-t|lg\\-u|lg\\-w|lg/k|lg/l|lg/u|lg50|lg54|lge\\-|lge/|lynx|leno|m1\\-w|m3ga|m50/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot |mot\\-|mt50|mtp1|mtv |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec\\-|nem\\-|newg|neon)"
},
{
"device_replacement": "Generic Feature Phone",
"regex": "^(netf|noki|nzph|o2 x|o2\\-x|opwv|owg1|opti|oran|ot\\-s|p800|pand|pg\\-1|pg\\-2|pg\\-3|pg\\-6|pg\\-8|pg\\-c|pg13|phil|pn\\-2|pt\\-g|palm|pana|pire|pock|pose|psio|qa\\-a|qc\\-2|qc\\-3|qc\\-5|qc\\-7|qc07|qc12|qc21|qc32|qc60|qci\\-|qwap|qtek|r380|r600|raks|rim9|rove|s55/|sage|sams|sc01|sch\\-|scp\\-|sdk/|se47|sec\\-|sec0|sec1|semc|sgh\\-|shar|sie\\-|sk\\-0|sl45|slid|smb3|smt5|sp01|sph\\-|spv |spv\\-|sy01|samm|sany|sava|scoo|send|siem|smar|smit|soft|sony|t\\-mo|t218|t250|t600|t610|t618|tcl\\-|tdg\\-|telm|tim\\-|ts70|tsm\\-|tsm3|tsm5|tx\\-9|tagt)"
},
{
"device_replacement": "Generic Feature Phone",
"regex": "^(talk|teli|topl|tosh|up.b|upg1|utst|v400|v750|veri|vk\\-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vite|voda|vulc|w3c |w3c\\-|wapj|wapp|wapu|wapm|wig |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas\\-|your|zte\\-|zeto|aste|audi|avan|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd\\-|dang|eml2|fetc|hipt|http|ibro|idea|ikom|ipaq|jbro|jemu|jigs|keji|kyoc|kyok|libw|m\\-cr|midp|mmef|moto|mwbp|mywa|newt|nok6|o2im|pant|pdxg|play|pluc|port|prox|rozo|sama|seri|smal|symb|treo|upsi|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap\\-|webc|whit|wmlb|xda\\-|xda_)"
},
{
"device_replacement": "Spider",
"regex": "(bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\\-webcrawler|converacrawler|dataparksearch|findlinks)"
}
],
"mobile_os_families": [
"Windows Phone 6.5",
"Windows CE",
"Symbian OS"
],
"mobile_user_agent_families": [
"Firefox Mobile",
"Opera Mobile",
"Opera Mini",
"Mobile Safari",
"webOS",
"IE Mobile",
"Playstation Portable",
"Nokia",
"Blackberry",
"Palm",
"Silk",
"Android",
"Maemo",
"Obigo",
"Netfront",
"AvantGo",
"Teleca",
"SEMC-Browser",
"Bolt",
"Iris",
"UP.Browser",
"Symphony",
"Minimo",
"Bunjaloo",
"Jasmine",
"Dolfin",
"Polaris",
"BREW",
"Chrome Mobile",
"UC Browser",
"Tizen Browser"
],
"os_parsers": [
{
"regex": "(Android) (\\d+)\\.(\\d+)(?:[.\\-]([a-z0-9]+))?"
},
{
"regex": "(Android)\\-(\\d+)\\.(\\d+)(?:[.\\-]([a-z0-9]+))?"
},
{
"os_v1_replacement": "1",
"os_v2_replacement": "2",
"regex": "(Android) Donut"
},
{
"os_v1_replacement": "2",
"os_v2_replacement": "1",
"regex": "(Android) Eclair"
},
{
"os_v1_replacement": "2",
"os_v2_replacement": "2",
"regex": "(Android) Froyo"
},
{
"os_v1_replacement": "2",
"os_v2_replacement": "3",
"regex": "(Android) Gingerbread"
},
{
"os_v1_replacement": "3",
"regex": "(Android) Honeycomb"
},
{
"regex": "(Windows Phone 6\\.5)"
},
{
"os_replacement": "Windows XP",
"regex": "(Windows (?:NT 5\\.2|NT 5\\.1))"
},
{
"os_replacement": "Windows Phone OS",
"regex": "(XBLWP7)"
},
{
"os_replacement": "Windows 7",
"regex": "(Windows NT 6\\.1)"
},
{
"os_replacement": "Windows Vista",
"regex": "(Windows NT 6\\.0)"
},
{
"regex": "(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\\.0|Windows Vista|Windows 2000)"
},
{
"os_replacement": "Windows RT",
"regex": "(Windows NT 6\\.2; ARM;)"
},
{
"os_replacement": "Windows 8",
"regex": "(Windows NT 6\\.2)"
},
{
"os_replacement": "Windows 2000",
"regex": "(Windows NT 5\\.0)"
},
{
"regex": "(Windows Phone OS) (\\d+)\\.(\\d+)"
},
{
"os_replacement": "Windows Mobile",
"regex": "(Windows ?Mobile)"
},
{
"os_replacement": "Windows NT 4.0",
"regex": "(WinNT4.0)"
},
{
"os_replacement": "Windows 98",
"regex": "(Win98)"
},
{
"regex": "(Tizen)/(\\d+)\\.(\\d+)"
},
{
"regex": "(Mac OS X) (\\d+)[_.](\\d+)(?:[_.](\\d+))?"
},
{
"regex": "(?:PPC|Intel) (Mac OS X)"
},
{
"os_replacement": "iOS",
"regex": "(CPU OS|iPhone OS) (\\d+)_(\\d+)(?:_(\\d+))?"
},
{
"os_replacement": "iOS",
"regex": "(iPhone|iPad|iPod); Opera"
},
{
"os_replacement": "iOS",
"regex": "(iPhone|iPad|iPod).*Mac OS X.*Version/(\\d+)\\.(\\d+)"
},
{
"os_replacement": "ATV OS X",
"os_v1_replacement": "$1",
"os_v2_replacement": "$2",
"regex": "(AppleTV)/(\\d+)\\.(\\d+)"
},
{
"os_replacement": "Chrome OS",
"regex": "(CrOS) [a-z0-9_]+ (\\d+)\\.(\\d+)(?:\\.(\\d+))?"
},
{
"regex": "(Debian)-(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"
},
{
"regex": "(Linux Mint)(?:/(\\d+))?"
},
{
"regex": "(Mandriva)(?: Linux)?/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"
},
{
"os_replacement": "Symbian OS",
"regex": "(Symbian[Oo][Ss])/(\\d+)\\.(\\d+)"
},
{
"os_replacement": "Symbian^3 Anna",
"regex": "(Symbian/3).+NokiaBrowser/7\\.3"
},
{
"os_replacement": "Symbian^3 Belle",
"regex": "(Symbian/3).+NokiaBrowser/7\\.4"
},
{
"os_replacement": "Symbian^3",
"regex": "(Symbian/3)"
},
{
"os_replacement": "Symbian OS",
"regex": "(Series 60|SymbOS|S60)"
},
{
"regex": "(MeeGo)"
},
{
"os_replacement": "Symbian OS",
"regex": "Symbian [Oo][Ss]"
},
{
"os_replacement": "BlackBerry OS",
"regex": "(Black[Bb]erry)[0-9a-z]+/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"
},
{
"os_replacement": "BlackBerry OS",
"regex": "(Black[Bb]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"
},
{
"os_replacement": "BlackBerry Tablet OS",
"regex": "(RIM Tablet OS) (\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"os_replacement": "BlackBerry Tablet OS",
"regex": "(Play[Bb]ook)"
},
{
"os_replacement": "Blackberry OS",
"regex": "(Black[Bb]erry)"
},
{
"regex": "(GoogleTV) (\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"regex": "(GoogleTV)\\/\\d+"
},
{
"os_replacement": "webOS",
"regex": "(webOS|hpwOS)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"
},
{
"regex": "(SUSE|Fedora|Red Hat|PCLinuxOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"regex": "(SUSE|Fedora|Red Hat|Puppy|PCLinuxOS|CentOS)/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"regex": "(Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Red Hat|Slackware)/(\\d+)\\.(\\d+)"
},
{
"regex": "(PlayStation Vita) (\\d+)\\.(\\d+)"
},
{
"regex": "(Windows|OpenBSD|FreeBSD|NetBSD|Ubuntu|Kubuntu|Android|Arch Linux|CentOS|WeTab|Slackware)"
},
{
"regex": "(Linux)/(\\d+)\\.(\\d+)"
},
{
"regex": "(Linux|BSD)"
}
],
"user_agent_parsers": [
{
"family_replacement": "Wii",
"regex": "^(Opera)/(\\d+)\\.(\\d+) \\(Nintendo Wii"
},
{
"regex": "(SeaMonkey|Camino)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)"
},
{
"family_replacement": "Pale Moon (Firefox Variant)",
"regex": "(Pale[Mm]oon)/(\\d+)\\.(\\d+)\\.?(\\d+)?"
},
{
"family_replacement": "Firefox Mobile",
"regex": "(Fennec)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)"
},
{
"family_replacement": "Firefox Mobile",
"regex": "(Fennec)/(\\d+)\\.(\\d+)(pre)"
},
{
"family_replacement": "Firefox Mobile",
"regex": "(Fennec)/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Firefox Mobile",
"regex": "Mobile.*(Firefox)/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Firefox ($1)",
"regex": "(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)"
},
{
"family_replacement": "Firefox Alpha",
"regex": "(Firefox)/(\\d+)\\.(\\d+)(a\\d+[a-z]*)"
},
{
"family_replacement": "Firefox Beta",
"regex": "(Firefox)/(\\d+)\\.(\\d+)(b\\d+[a-z]*)"
},
{
"family_replacement": "Firefox Alpha",
"regex": "(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(a\\d+[a-z]*)"
},
{
"family_replacement": "Firefox Beta",
"regex": "(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(b\\d+[a-z]*)"
},
{
"family_replacement": "Firefox ($1)",
"regex": "(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"
},
{
"family_replacement": "MicroB",
"regex": "(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"regex": "(MozillaDeveloperPreview)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"
},
{
"regex": "(Flock)/(\\d+)\\.(\\d+)(b\\d+?)"
},
{
"regex": "(RockMelt)/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Netscape",
"regex": "(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Netscape",
"regex": "(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)"
},
{
"family_replacement": "Netscape",
"regex": "(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "My Internet Browser",
"regex": "(MyIBrow)/(\\d+)\\.(\\d+)"
},
{
"regex": "(Opera Tablet).*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"
},
{
"family_replacement": "Opera Mobile",
"regex": "(Opera)/.+Opera Mobi.+Version/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Opera Mobile",
"regex": "Opera Mobi"
},
{
"regex": "(Opera Mini)/(\\d+)\\.(\\d+)"
},
{
"regex": "(Opera Mini)/att/(\\d+)\\.(\\d+)"
},
{
"regex": "(Opera)/9.80.*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"
},
{
"regex": "(webOSBrowser)/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "webOSBrowser",
"regex": "(webOS)/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "webOS TouchPad",
"regex": "(wOSBrowser).+TouchPad/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "LuaKit",
"regex": "(luakit)"
},
{
"regex": "(Lightning)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)"
},
{
"family_replacement": "Swiftfox",
"regex": "(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)"
},
{
"family_replacement": "Swiftfox",
"regex": "(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)"
},
{
"family_replacement": "Rekonq",
"regex": "(rekonq)/(\\d+)\\.(\\d+) Safari"
},
{
"family_replacement": "Rekonq",
"regex": "rekonq"
},
{
"family_replacement": "Conkeror",
"regex": "(conkeror|Conkeror)/(\\d+)\\.(\\d+)\\.?(\\d+)?"
},
{
"family_replacement": "Konqueror",
"regex": "(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"regex": "(WeTab)-Browser"
},
{
"family_replacement": "Comodo Dragon",
"regex": "(Comodo_Dragon)/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"regex": "(YottaaMonitor|BrowserMob|HttpMonitor|YandexBot|Slurp|BingPreview|PagePeeker|ThumbShotsBot|WebThumb|URL2PNG|ZooShot|GomezA|Catchpoint bot|Willow Internet Crawler|Google SketchUp|Read%20Later)"
},
{
"regex": "(Kindle)/(\\d+)\\.(\\d+)"
},
{
"regex": "(Symphony) (\\d+).(\\d+)"
},
{
"regex": "(Minimo)"
},
{
"family_replacement": "Chrome Mobile",
"regex": "(CrMo)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Chrome Mobile iOS",
"regex": "(CriOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Chrome Mobile",
"regex": "(Chrome)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+) Mobile"
},
{
"family_replacement": "Chrome Frame",
"regex": "(chromeframe)/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"regex": "(UC Browser)(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Tizen Browser",
"regex": "(SLP Browser)/(\\d+)\\.(\\d+)"
},
{
"regex": "(Epiphany)/(\\d+)\\.(\\d+).(\\d+)"
},
{
"family_replacement": "Sogou Explorer",
"regex": "(SE 2\\.X) MetaSr (\\d+)\\.(\\d+)"
},
{
"family_replacement": "Baidu Explorer",
"regex": "(FlyFlow)/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "PingdomBot",
"regex": "(Pingdom.com_bot_version_)(\\d+)\\.(\\d+)"
},
{
"family_replacement": "FacebookBot",
"regex": "(facebookexternalhit)/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "TwitterBot",
"regex": "(Twitterbot)/(\\d+)\\.(\\d+)"
},
{
"regex": "(PyAMF)/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"regex": "(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|WebPilot|Vodafone|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\\.Browser|Bunjaloo|Google Earth|Raven for Mac)/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"regex": "(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser)/(\\d+)\\.(\\d+)"
},
{
"regex": "(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"regex": "(iCab|Lunascape|Opera|Android|Jasmine|Polaris|BREW) (\\d+)\\.(\\d+)\\.?(\\d+)?"
},
{
"regex": "(Android) Donut",
"v1_replacement": "1",
"v2_replacement": "2"
},
{
"regex": "(Android) Eclair",
"v1_replacement": "2",
"v2_replacement": "1"
},
{
"regex": "(Android) Froyo",
"v1_replacement": "2",
"v2_replacement": "2"
},
{
"regex": "(Android) Gingerbread",
"v1_replacement": "2",
"v2_replacement": "3"
},
{
"regex": "(Android) Honeycomb",
"v1_replacement": "3"
},
{
"family_replacement": "IE Mobile",
"regex": "(IEMobile)[ /](\\d+)\\.(\\d+)"
},
{
"family_replacement": "IE Large Screen",
"regex": "(MSIE) (\\d+)\\.(\\d+).*XBLWP7"
},
{
"regex": "(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"regex": "(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?"
},
{
"regex": "(Obigo)InternetBrowser"
},
{
"regex": "(Obigo)\\-Browser"
},
{
"regex": "(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?"
},
{
"family_replacement": "Maxthon",
"regex": "(MAXTHON|Maxthon) (\\d+)\\.(\\d+)"
},
{
"regex": "(Maxthon|MyIE2|Uzbl|Shiira)",
"v1_replacement": "0"
},
{
"family_replacement": "PlayStation",
"regex": "(PLAYSTATION) (\\d+)"
},
{
"regex": "(PlayStation Portable)[^\\d]+(\\d+).(\\d+)"
},
{
"regex": "(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Polaris",
"regex": "(POLARIS)/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Polaris",
"regex": "(Embider)/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Bon Echo",
"regex": "(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Mobile Safari",
"regex": "(iPod).+Version/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Mobile Safari",
"regex": "(iPod).*Version/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Mobile Safari",
"regex": "(iPhone).*Version/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Mobile Safari",
"regex": "(iPhone).*Version/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Mobile Safari",
"regex": "(iPad).*Version/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Mobile Safari",
"regex": "(iPad).*Version/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Mobile Safari",
"regex": "(iPod|iPhone|iPad);.*CPU.*OS (\\d+)(?:_\\d+)?_(\\d+).*Mobile"
},
{
"family_replacement": "Mobile Safari",
"regex": "(iPod|iPhone|iPad)"
},
{
"regex": "(AvantGo) (\\d+).(\\d+)"
},
{
"regex": "(Avant)",
"v1_replacement": "1"
},
{
"family_replacement": "Nokia Services (WAP) Browser",
"regex": "^(Nokia)"
},
{
"regex": "(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)\\.(\\d+)"
},
{
"regex": "(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)"
},
{
"regex": "(NokiaBrowser)/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "NokiaBrowser",
"regex": "(BrowserNG)/(\\d+)\\.(\\d+).(\\d+)"
},
{
"family_replacement": "NokiaBrowser",
"regex": "(Series60)/5\\.0",
"v1_replacement": "7",
"v2_replacement": "0"
},
{
"family_replacement": "Nokia OSS Browser",
"regex": "(Series60)/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Nokia Series 40 Ovi Browser",
"regex": "(S40OviBrowser)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"regex": "(Nokia)[EN]?(\\d+)"
},
{
"family_replacement": "Blackberry WebKit",
"regex": "(PlayBook).+RIM Tablet OS (\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Blackberry WebKit",
"regex": "(Black[bB]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Blackberry",
"regex": "(Black[bB]erry)\\s?(\\d+)"
},
{
"regex": "(OmniWeb)/v(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Palm Blazer",
"regex": "(Blazer)/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Palm Pre",
"regex": "(Pre)/(\\d+)\\.(\\d+)"
},
{
"regex": "(Links) \\((\\d+)\\.(\\d+)"
},
{
"regex": "(QtWeb) Internet Browser/(\\d+)\\.(\\d+)"
},
{
"regex": "(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?"
},
{
"family_replacement": "WebKit Nightly",
"regex": "(AppleWebKit)/(\\d+)\\.?(\\d+)?\\+ .* Safari"
},
{
"family_replacement": "Safari",
"regex": "(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/"
},
{
"regex": "(Safari)/\\d+"
},
{
"regex": "(OLPC)/Update(\\d+)\\.(\\d+)"
},
{
"regex": "(OLPC)/Update()\\.(\\d+)",
"v1_replacement": "0"
},
{
"regex": "(SEMC\\-Browser)/(\\d+)\\.(\\d+)"
},
{
"family_replacement": "Teleca Browser",
"regex": "(Teleca)"
},
{
"family_replacement": "IE",
"regex": "(MSIE) (\\d+)\\.(\\d+)"
},
{
"regex": "(Nintendo 3DS).* Version/(\\d+)\\.(\\d+)(?:\\.(\\w+))"
},
{
"family_replacement": "Python Requests",
"regex": "(python-requests)/(\\d+)\\.(\\d+)"
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment