UNPKG

node-device-detector

Version:

Nodejs device detector (port matomo-org/device-detector)

2,098 lines (2,097 loc) 1.69 MB
module.exports = { "360": { "regex": "(?:180[1379]-A01|1713-A01|1707-A01|1509-A00|1603-A03|1607-A01|1503-A01|1505-A0[12]|1605-A01)(?:[);/ ]|$)", "device": "smartphone", "models": [ { "regex": "1807-A01(?:[);/ ]|$)", "model": "N7" }, { "regex": "1803-A01(?:[);/ ]|$)", "model": "N7 Lite" }, { "regex": "1809-A01(?:[);/ ]|$)", "model": "N7 Pro" }, { "regex": "1713-A01(?:[);/ ]|$)", "model": "N6 Lite" }, { "regex": "1707-A01(?:[);/ ]|$)", "model": "N6" }, { "regex": "1801-A01(?:[);/ ]|$)", "model": "N6 Pro" }, { "regex": "1509-A00(?:[);/ ]|$)", "model": "Q5 Plus" }, { "regex": "1503-A01(?:[);/ ]|$)", "model": "N4" }, { "regex": "1605-A01(?:[);/ ]|$)", "model": "N5" }, { "regex": "1603-A03(?:[);/ ]|$)", "model": "N4A" }, { "regex": "1607-A01(?:[);/ ]|$)", "model": "N5S" }, { "regex": "1505-A0[12](?:[);/ ]|$)", "model": "N4S" } ] }, "8848": { "regex": "8848 (M[3-6])(?:[);/ ]|$)", "device": "smartphone", "model": "$1" }, "Ace": { "regex": "(?:BUZZ [1-5]|BUZZ 4(?:Pro|S|Lite)|CLEVER [13]|URBAN [123](?: Pro)?)(?:[);/ ]|$)", "device": "smartphone", "models": [ { "regex": "BUZZ ([45]) Ultra", "model": "Buzz $1 Ultra" }, { "regex": "BUZZ ([45]) Note", "model": "Buzz $1 Note" }, { "regex": "BUZZ ([45]) Prime", "model": "Buzz $1 Prime" }, { "regex": "BUZZ 5 Pro Plus", "model": "Buzz 5 Pro+" }, { "regex": "BUZZ ([45]) ?Pro", "model": "Buzz $1 Pro" }, { "regex": "BUZZ ([1245]) ?Lite", "model": "Buzz $1 Lite" }, { "regex": "BUZZ ([123]) Plus", "model": "Buzz $1 Plus" }, { "regex": "BUZZ 4S", "model": "Buzz 4S" }, { "regex": "BUZZ ([1-5])", "model": "Buzz $1" }, { "regex": "CLEVER ([13])", "model": "Clever $1" }, { "regex": "URBAN 1 Pro", "model": "Urban 1 Pro" }, { "regex": "URBAN ([123])", "model": "Urban $1" } ] }, "Tunisie Telecom": { "regex": "StarTrail TT(?:[);/ ]|$)", "device": "smartphone", "model": "StarTrail by TT" }, "SFR": { "regex": "StarShine|StarTrail|STARADDICT|StarText|StarNaute|StarXtrem|StarTab|(?:Android 8(?:[\\d.]*);(?: [\\w-]+;)? (?:AURA (?:PLUS|ULTRA)|AURA))(?: Build|[;)])", "device": "smartphone", "models": [ { "regex": "StarXtrem II(?:[);/ ]|$)", "model": "StarXtrem 2" }, { "regex": "StarXtrem ?([3-6])(?:[);/ ]|$)", "model": "StarXtrem $1" }, { "regex": "StarXtrem(?:[);/ ]|$)", "model": "StarXtrem" }, { "regex": "StarTrail III(?:[);/ ]|$)", "model": "StarTrail 3" }, { "regex": "StarTrail II(?:[);/ ]|$)", "model": "StarTrail 2" }, { "regex": "StarTrail[ _]?([1-9])[ _]([34])G(?:[);/ ]|$)", "model": "StarTrail $1 $2G" }, { "regex": "StarTrail[ _]?([1-9])(?:[);/ ]|$)", "model": "StarTrail $1" }, { "regex": "StarTrail(?:[);/ ]|$)", "model": "StarTrail" }, { "regex": "AURA PLUS(?:[);/ ]|$)", "model": "Aura Plus" }, { "regex": "aura ULTRA(?:[);/ ]|$)", "model": "Aura Ultra" }, { "regex": "AURA(?:[);/ ]|$)", "model": "Aura" }, { "regex": "StarShine II(?:[);/ ]|$)", "model": "StarShine 2" }, { "regex": "StarShine III(?:[);/ ]|$)", "model": "StarShine 3" }, { "regex": "StarShine(?:[);/ ]|$)", "model": "StarShine" }, { "regex": "STARADDICT 6(?:[);/ ]|$)", "model": "StarAddict 6" }, { "regex": "STARADDICT 4(?:[);/ ]|$)", "model": "StarAddict 4" }, { "regex": "STARADDICT III(?:[);/ ]|$)", "model": "StarAddict 3" }, { "regex": "STARADDICT II Plus(?:[);/ ]|$)", "model": "StarAddict 2 Plus" }, { "regex": "STARADDICT II(?:[);/ ]|$)", "model": "StarAddict 2" }, { "regex": "STARADDICT(?:[);/ ]|$)", "model": "StarAddict" }, { "regex": "StarText II(?:[);/ ]|$)", "model": "StarText 2" }, { "regex": "StarText(?:[);/ ]|$)", "model": "StarText" }, { "regex": "StarNaute II(?:[);/ ]|$)", "model": "StarNaute 2" }, { "regex": "STARNAUTE ?([1-4])(?:[);/ ]|$)", "model": "StarNaute $1" }, { "regex": "StarNaute(?:[);/ ]|$)", "model": "StarNaute" }, { "regex": "StarTab", "model": "StarTab", "device": "tablet" }, { "regex": "((?:StarShine|StarTrail|STARADDICT|StarText|StarNaute|StarXtrem)[^;/]*) Build", "model": "$1" } ] }, "Adronix": { "regex": "Adronix[ _]?(?:MT[0-9]+|X1001|Mini ?Tab ?7 ?3G)(?:[);/ ]|$)", "device": "tablet", "models": [ { "regex": "Adronix ?Mini ?Tab ?7 ?3G", "model": "Mini Tab 7 3G" }, { "regex": "Adronix[ _]?(MT[0-9]+|X1001)(?:[);/ ]|$)", "model": "$1" } ] }, "Cherry Mobile": { "regex": "Cherry|Superion[_ ](?:S2|Radar Deluxe|S1 DTV|S1 Plus DTV|Tab Pro)|Flare([ _])?(Selfie|2\\.[01]|2X|4|A[123]|J[1235678]|P[13]|S[4-8]|X2|Y[3567]|S[ _]Play|HD|LITE|XL|X_V[23]|Y3s|Tab|INFINITY)(?:[ _](?:Pro|Plus|Max|LTE))?|Fusion Aura 3s|Radar Deluxe 2|Desire R[678]|Desire_R[67]_Lite|Fusion Bolt|Omega[_ ](?:Icon 2|Icon Lite 2|lite[_ ][243][Cs]?|HD[ _][345]|HD_Duo|X)|Spin Max 2|Selfie_Two|Flare X Lite|Flare_5|Android 1.*Aqua S9|Aqua S10|MAIA PAD PLUS|COSMOS THREE| Revel 3G|Touch XL 2|DSR_(?:R8|R7P?)|CUBIX CUBE 3", "device": "smartphone", "models": [ { "regex": "(Flare2X|Aqua S(?:9|10)(?: (?:Max|Lite|Pro))?)", "model": "$1" }, { "regex": "Flare[_ ]HD[_ ]([345])", "model": "Flare HD $1" }, { "regex": "Flare_HD_MAX", "model": "Flare HD Max" }, { "regex": "FLARE LITE", "model": "Flare Lite" }, { "regex": "Flare[ _]S[ _]Play", "model": "Flare S Play" }, { "regex": "Flare (2\\.[01])", "model": "Flare $1" }, { "regex": "Flare[_ ]J([2356])S", "model": "Flare J$1s" }, { "regex": "Flare_([A-Z]\\d+)_Prime", "model": "Flare $1 Prime" }, { "regex": "Flare_([A-Z]\\d+)_Deluxe", "model": "Flare $1 Deluxe" }, { "regex": "Flare[_ ]([A-Z]\\d+)[_ ]Power", "model": "Flare $1 Power" }, { "regex": "Flare[_ ]([A-Z]\\d+)[_ ]Pro", "model": "Flare $1 Pro" }, { "regex": "Flare[_ ]([A-Z]\\d+)[_ ]Lite", "model": "Flare $1 Lite" }, { "regex": "Flare[_ ]([A-Z]\\d+)[_ ]Plus", "model": "Flare $1 Plus" }, { "regex": "Flare XL Plus", "model": "Flare XL Plus" }, { "regex": "Flare ?J3 ?Plus", "model": "Flare J3 Plus" }, { "regex": "Flare X Lite", "model": "Flare X Lite" }, { "regex": "Cherry[_ ]X740", "model": "Flare A5" }, { "regex": "Flare[ _]X[_ ]V([23])", "model": "Flare X V$1" }, { "regex": "Flare[ _]XL[_ ]?2", "model": "Flare XL 2" }, { "regex": "Flare[ _]([A-Z]\\d+)[ _]mini", "model": "Flare $1 Mini" }, { "regex": "Flare_J2_2018", "model": "Flare J2 (2018)" }, { "regex": "Flare S4 Max LTE", "model": "Flare S4 Max LTE" }, { "regex": "Flare[_ ]([A-Z]\\d+)[_ ]Max", "model": "Flare $1 Max" }, { "regex": "FlareS5LiteDTV", "model": "Flare S5 Lite DTV" }, { "regex": "Flare[_ ]J2[_ ]DTV", "model": "Flare S2 DTV" }, { "regex": "Flare[_ ]INFINITY", "model": "Flare Infinity" }, { "regex": "Flare[_ ]Lite[_ ]3S", "model": "Flare Lite S3" }, { "regex": "Flare(?:[ _])?(Selfie|A1_Roam|A[123]|J8 LTE|J1s|J[1235678]|P[13]|S[4-8]|X2|Y3s|Y7_LTE|Y[3567]|[45])", "model": "Flare $1" }, { "regex": "Touch XL 2", "model": "Touch XL 2" }, { "regex": "OMEGA[ _]HD[ _]([345])", "model": "Omega HD $1" }, { "regex": "Omega_HD_Duo", "model": "Omega HD Duo" }, { "regex": "Omega Icon Lite 2", "model": "Omega Icon Lite 2" }, { "regex": "Omega Icon 2", "model": "Omega Icon 2" }, { "regex": "Omega[_ ]Lite[_ ](3[Cs]|[24])", "model": "Omega Lite $1" }, { "regex": "Omega[_ ]X", "model": "Omega X" }, { "regex": "Spin Max 2", "model": "Spin Max 2" }, { "regex": "Selfie_Two", "model": "Selfie Two" }, { "regex": "Desire[ _]R(\\d)[ _]Lite", "model": "Desire R$1 Lite" }, { "regex": "Desire R6 plus", "model": "Desire R6 Plus" }, { "regex": "Desire R6", "model": "Desire R6" }, { "regex": "DSR_R([78])P", "model": "Desire R$1 Plus" }, { "regex": "DSR_R([78])", "model": "Desire R$1" }, { "regex": "Desire Eye", "model": "Desire Eye" }, { "regex": "COSMOS THREE", "model": "Cosmos 3" }, { "regex": "CUBIX CUBE 3", "model": "Cubix Cube 3" }, { "regex": "Revel 3G", "model": "Revel 3G" }, { "regex": "Radar Deluxe 2", "model": "Superion Radar Deluxe 2", "device": "tablet" }, { "regex": "Superion_S2_Plus", "model": "Superion S2 Plus", "device": "tablet" }, { "regex": "Superion S1 Plus DTV", "model": "Superion S1 Plus DTV", "device": "tablet" }, { "regex": "Superion Tab Pro", "model": "Superion Tab Pro", "device": "tablet" }, { "regex": "Flare Tab Pro V(\\d)", "device": "tablet", "model": "Flare Tab Pro V$1" }, { "regex": "Fusion Aura 3s", "device": "tablet", "model": "Fusion Aura 3S" }, { "regex": "MAIA PAD PLUS", "device": "tablet", "model": "Maia Pad Plus" }, { "regex": "(Fusion Bolt|Flare Tab Pro|Flare Tab|Superion[_ ](?:S2|Radar Deluxe|S1 DTV))", "model": "$1", "device": "tablet" }, { "regex": "Cherry(?:[ _]?Mobile)?[ _]?([^/;]+)(?: Build|[);])", "model": "$1" } ] }, "HTC": { "regex": "HTC|Sprint (?:APA|ATP)|ADR(?!910L)[a-z0-9]+|NexusHD2|Amaze[ _]4G(?:[);/ ]|$)|(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/)]+)(?: Build|\\))|(Amaze[ _]4G|(?<!BLU LIFE |ZOPO )One ?[XELSV\\+]+)(?:[);/ ]|$)|SPV E6[05]0|(One M8|One Mini 2|X525a|PG86100|PC36100|XV6975|PJ83100|2PYB2|2PS64|2PZC5|0PJA10|0PJA2|HTV33|0PM92|0PCV1|601HT|0PAJ5|HTL2[23]|HTV3[12]|2PQ93|X2-HT|EXODUS 1|ISW13HT|710C|U Ultra|2Q8L10000|2Q55100|2QC9200|2PZC100|2PZF1|2PZM3|2Q6E1|U12 life|U Play)(?:[);/ ]|$)", "device": "smartphone", "models": [ { "regex": "(?:HTC[_ ](?:U-2u|U Play|2PZM3)|2PZM3|U Play)(?:[);/ ]|$)", "model": "U Play" }, { "regex": "(?:HTC[_ ]U-1[wu]|2PZF1|U Ultra)(?:[);/ ]|$)", "model": "U Ultra" }, { "regex": "(?:U11 plus|(?:HTC_)?2Q4D[12]00)(?:[);/ ]|$)", "model": "U11 Plus" }, { "regex": "(?:HTC )?(?:U12\\+|2Q55[13]00)(?:[);/ ]|$)", "model": "U12 Plus" }, { "regex": "U(1[12]) life(?:[);/ ]|$)", "model": "U$1 Life" }, { "regex": "2Q6E1(?:[);/ ]|$)", "model": "U12 Life" }, { "regex": "(?:U11 Eyes|2Q4R100)(?:[);/ ]|$)", "model": "U11 Eyes" }, { "regex": "XV6975(?:[);/ ]|$)", "model": "Imagio" }, { "regex": "PG86100(?:[);/ ]|$)", "model": "Evo 3G" }, { "regex": "PC36100(?:[);/ ]|$)", "model": "Evo 4G" }, { "regex": "HTC[_ ]D628u", "model": "Desire 628 Dual SIM" }, { "regex": "(?:HTC[_ ])?(?:HTV33|601HT|2PZC100|2PZC5|U-3[uw])(?:[);/ ]|$)", "model": "U11" }, { "regex": "(?:HTC_)?(?:801e|802[wdt]|PN071)", "model": "One" }, { "regex": "PJ83100(?:[);/ ]|$)", "model": "One X" }, { "regex": "HTC[_ ]PO582(?:[);/ ]|$)", "model": "One Mini" }, { "regex": "(?:HTC_?)?(?:One[ _]?Mini[ _]?2|M8MINx)(?:[);/ ]|$)", "model": "One Mini 2" }, { "regex": "X2-HT(?:[);/ ]|$)", "model": "One X2" }, { "regex": "HTC 2PXH3(?:[);/ ]|$)", "model": "One X10" }, { "regex": "ISW13HT(?:[);/ ]|$)", "model": "J" }, { "regex": "HTL22(?:[);/ ]|$)", "model": "J One" }, { "regex": "(?:HTC U23 pro|2QC9200)(?:[);/ ]|$)", "model": "U23 Pro" }, { "regex": "(?:HTL23|HTV31)(?:[);/ ]|$)", "model": "J Butterfly" }, { "regex": "HTCButterflys901s(?:[);/ ]|$)", "model": "Butterfly S" }, { "regex": "One M9_Prime Camera Edition", "model": "One M9 Prime Camera Edition" }, { "regex": "(?:HTC[_ ])?(?:M9pw|One M9 ?PLUS)(?:[);/ ]|$)", "model": "One M9 Plus" }, { "regex": "(?:HTC[_ ]M9u|0PJA2|0PJA10|HTC One M9|HTC6535LVW)(?:[);/ ]|$)", "model": "One M9" }, { "regex": "One[ _](X9|[EM]8) dual sim(?:[);/ ]|$)", "model": "One $1 Dual SIM" }, { "regex": "Desire[ _]([\\d\\w]+) dual sim(?:[);/ ]|$)", "model": "Desire $1 Dual SIM" }, { "regex": "HTC(?: One m7|6500LVW|PN071)(?:[);/ ]|$)", "model": "One M7" }, { "regex": "(?:One M8|HTC6525LVW|HTC[_ ]M8[xd]|HTC[_ ]0P6B|HTCOneM8)(?:[);/ ]|$)", "model": "One M8" }, { "regex": "HTC ?One ?M8 ?Eye(?:[);/ ]|$)", "model": "One M8 Eye" }, { "regex": "(?:HTC_)?(?:0PAJ5|M8Sx)(?:[);/ ]|$)", "model": "One E8" }, { "regex": "HTC[_ ]E9x(?:[);/ ]|$)", "model": "One E9" }, { "regex": "HTC[_ ]?(?:One[_ ])?E9(?:pw|PLUS dual sim)(?:[);/ ]|$)", "model": "One E9 Plus" }, { "regex": "HTC_S9u(?:[);/ ]|$)", "model": "One S9" }, { "regex": "HTC6515LVW(?:[);/ ]|$)", "model": "One Remix" }, { "regex": "X525a(?:[);/ ]|$)", "model": "One X+" }, { "regex": "(?:2PQ9(?:3|10)|HTC[_ ]A9u)(?:[);/ ]|$)", "model": "One A9" }, { "regex": "ADR6300", "model": "Droid Incredible" }, { "regex": "HTC6435LVW", "model": "Droid DNA" }, { "regex": "ADR6400L", "model": "ThunderBolt" }, { "regex": "ADR6410LRA", "model": "Droid Incredible 3" }, { "regex": "SPV E600", "model": "Excalibur" }, { "regex": "SPV E650", "model": "Vox" }, { "regex": "2PYB2", "model": "Bolt" }, { "regex": "2PS64|HTC6545LVW|HTC[_ ]M10h", "model": "10" }, { "regex": "(710C)(?:[);/ ]|$)", "model": "Desire $1" }, { "regex": "0PM92(?:[);/ ]|$)", "model": "Desire 626S" }, { "regex": "(?:HTC_)?0PCV[12](?:[);/ ]|$)", "model": "Desire 510" }, { "regex": "HTC ?D160LVW(?:PP)?(?:[);/ ]|$)", "model": "Desire 530" }, { "regex": "HTC[_ ]D310n(?:[);/ ]|$)", "model": "Desire 310" }, { "regex": "HTC[_ ]v01(?:[);/ ]|$)", "model": "Desire 320" }, { "regex": "608t(?:[);/ ]|$)", "model": "Desire 608t" }, { "regex": "HTC_(?:0P9O2|D610x)(?:[);/ ]|$)", "model": "Desire 610" }, { "regex": "HTC[_ ]?(0P4E[12])(?:[);/ ]|$)", "model": "Desire 601" }, { "regex": "HTC_?D620h(?:[);/ ]|$)", "model": "Desire 620" }, { "regex": "HTC[_ ]?(?:D626ph|D200LVWPP)(?:[);/ ]|$)", "model": "Desire 626" }, { "regex": "HTC_?(?:0P9C2|D816[xd]?)(?:[);/ ]|$)", "model": "Desire 816" }, { "regex": "HTC_?D526h(?:[);/ ]|$)", "model": "Desire 526" }, { "regex": "2Q8L10000(?:[);/ ]|$)", "model": "Desire 19s" }, { "regex": "Desire620G(?:[);/ ]|$)", "model": "Desire 620G Dual SIM" }, { "regex": "EXODUS 1(?:[);/ ]|$)", "model": "Exodus 1" }, { "regex": "HTC 2Q7A100(?:[);/ ]|$)", "model": "U19e" }, { "regex": "HTC Desire 10 compact(?:[);/ ]|$)", "model": "Desire 10 Compact" }, { "regex": "HTC_D10i(?:[);/ ]|$)", "model": "Desire 10 Pro" }, { "regex": "HTC[ _](?:10[ _]evo|M10f)(?:[);/ ]|$)", "model": "10 Evo" }, { "regex": "HTC Desire (\\d+) pro 5G(?:[);/ ]|$)", "model": "Desire $1 Pro 5G" }, { "regex": "HTC Desire (\\d+) pro(?:[);/ ]|$)", "model": "Desire $1 Pro" }, { "regex": "Desire 10 lifestyle(?:[);/ ]|$)", "model": "Desire 10 Life Style" }, { "regex": "NexusHD2", "model": "HD2" }, { "regex": "(?:HTC[_ ])?TATTOO[_ ]A3288", "model": "Tattoo A3288" }, { "regex": "HTC[ _-]P715a", "device": "tablet", "model": "P715a" }, { "regex": "HTC[ _-]Flyer Build", "device": "tablet", "model": "Flyer" }, { "regex": "HTC[ _-](A10[13]) Plus", "device": "tablet", "model": "$1 Plus" }, { "regex": "HTC[ _-](A10[0123])", "device": "tablet", "model": "$1" }, { "regex": "HTC[ _-]Flyer[ _-]([\\w]{1,5})", "device": "tablet", "model": "Flyer $1" }, { "regex": "HTC(?:[ _-])?(?:One[ _-]max|6600LVW|0P3P7)(?:[);/ ]|$)", "device": "phablet", "model": "One Max" }, { "regex": "USCCHTC(\\d+)", "model": "$1" }, { "regex": "Sprint (ATP.*) Build", "device": "tablet", "model": "$1 (Sprint)" }, { "regex": "Sprint (APA.*) Build", "model": "$1 (Sprint)" }, { "regex": "Wildfire (E3) lite", "model": "Wildfire $1 Lite" }, { "regex": "Wildfire (E) star", "model": "Wildfire $1 Star" }, { "regex": "Wildfire (E2?) plus", "model": "Wildfire $1 Plus" }, { "regex": "HTC[ _]([^/;]+) [0-9]+(?:\\.[0-9]+)+ Build", "model": "$1" }, { "regex": "HTC[ _]([^/;]+) Build", "model": "$1" }, { "regex": "HTC[ _]([a-z0-9]+[ _-]?(?:[a-z0-9_+\\-])*)", "model": "$1" }, { "regex": "(?:HTC-)?HTC(?:[-/ ])?([a-z0-9\\-_]+)", "model": "$1" }, { "regex": "HTC;(?: )?([a-z0-9 ]+)", "model": "$1" }, { "regex": "(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/)]+)(?: Build|[);])", "model": "$1 $2" }, { "regex": "(Amaze[ _]4G|One ?[XELSV\\+]*) Build", "model": "$1" }, { "regex": "(ADR[^;/]+) Build", "model": "$1" }, { "regex": "(ADR[a-z0-9]+)", "model": "$1" }, { "regex": "HTV32(?:[);/ ]|$)", "model": "10" } ] }, "Microsoft": { "regex": "KIN\\.(One|Two)|RM-(?:1010|1031|106[57]|107[23467]|1089|109[02]|1096|1099|1109|111[348]|1127|1141|115[24]|994)|Microsoft; Lumia|Lumia (?:1530|1320|950|850|650|640|550|535|435)|Corporation/Surface|Surface Duo|Surface 3", "device": "smartphone", "models": [ { "regex": "KIN\\.(One|Two)", "device": "feature phone", "model": "Kin $1" }, { "regex": "RM-1099|Lumia 430", "model": "Lumia 430" }, { "regex": "RM-1114|Lumia 435", "model": "Lumia 435" }, { "regex": "RM-1031|Lumia 532", "model": "Lumia 532" }, { "regex": "Lumia 535 Dual SIM", "model": "Lumia 535 Dual SIM" }, { "regex": "RM-109[02]|RM-1089|Lumia 535", "model": "Lumia 535" }, { "regex": "RM-1141|Lumia 540", "model": "Lumia 540" }, { "regex": "RM-1127|Lumia 550", "model": "Lumia 550" }, { "regex": "RM-1010", "model": "Lumia 638" }, { "regex": "Lumia 640 XL LTE", "model": "Lumia 640 XL LTE", "device": "phablet" }, { "regex": "RM-106[57]|RM-1096|Lumia 640 XL", "model": "Lumia 640 XL", "device": "phablet" }, { "regex": "Lumia 640 LTE Dual SIM", "model": "Lumia 640 LTE Dual SIM" }, { "regex": "Lumia 640 LTE", "model": "Lumia 640 LTE" }, { "regex": "Lumia 640 Dual SIM", "model": "Lumia 640 Dual SIM" }, { "regex": "RM-1109|RM-1113|RM-107[23467]|Lumia 640", "model": "Lumia 640" }, { "regex": "RM-1154|Lumia 650", "model": "Lumia 650" }, { "regex": "RM-1152", "model": "Lumia 650 SS" }, { "regex": "Lumia 850", "model": "Lumia 850" }, { "regex": "Lumia 950 XL Dual SIM", "model": "Lumia 950 XL Dual SIM", "device": "phablet" }, { "regex": "Lumia 950 XL", "model": "Lumia 950 XL", "device": "phablet" }, { "regex": "Lumia 950 Dual SIM", "model": "Lumia 950 Dual SIM" }, { "regex": "Lumia 950|RM-1118", "model": "Lumia 950" }, { "regex": "RM-994|Lumia 1320", "model": "Lumia 1320" }, { "regex": "Lumia 1530", "model": "Lumia 1530" }, { "regex": "Surface Book 3", "device": "desktop", "model": "Surface Book 3" }, { "regex": "Surface Pro( [34])?", "device": "desktop", "model": "Surface Pro$1" }, { "regex": "Surface Duo 2", "device": "tablet", "model": "Surface Duo 2" }, { "regex": "Surface Duo", "device": "tablet", "model": "Surface Duo" }, { "regex": "Surface 3", "device": "tablet", "model": "Surface 3" }, { "regex": "Microsoft; Lumia ([^;/)]+)(?:[;/)]|$)", "model": "Lumia $1" } ] }, "Nokia": { "regex": "Nokia(?!Browser|Webview|; GT-I8750)|Lumia|Maemo RX|portalmmm/2\\.0 N7|portalmmm/2\\.0 NK|nok[0-9]+|Symbian.*\\s([a-z0-9]+)$|RX-51 N900|TA-[0-9]{4}|N(?:1374|1530|15[01256])DL|ARM; 909", "device": "smartphone", "models": [ { "regex": "TA-10(07|23|29|35)", "model": "2" }, { "regex": "TA-10(20|28|32|38)", "model": "3" }, { "regex": "TA-10(24|27|44|53)", "model": "5" }, { "regex": "TA-10(00|03|21|25|33|39|54)", "model": "6" }, { "regex": "TA-1041", "model": "7" }, { "regex": "TA-10(04|12|52)", "model": "8" }, { "regex": "Nokia 8 Sirocco", "model": "8 Sirocco" }, { "regex": "Nokia 7 plus", "model": "7 plus" }, { "regex": "Nokia 6\\.1 Plus", "model": "6.1 Plus" }, { "regex": "Nokia 5\\.1 Plus", "model": "5.1 Plus" }, { "regex": "Nokia 3\\.1 Plus", "model": "3.1 Plus" }, { "regex": "Nokia 1 Plus", "model": "1 Plus" }, { "regex": "Nokia 2 V(?:[);/ ]|$)", "model": "2 V Tella" }, { "regex": "Nokia 8 V 5G UW", "model": "8V 5G UW" }, { "regex": "Nokia[_ ]Xplus", "model": "X+" }, { "regex": "N15[26]DL", "model": "C100" }, { "regex": "N151DL", "model": "C200" }, { "regex": "N150DL", "model": "G100" }, { "regex": "N1374DL", "model": "G300 5G" }, { "regex": "N155DL", "model": "G300" }, { "regex": "N1530DL", "model": "G400 5G" }, { "regex": "Nokia ?X2DS", "model": "X2 Dual" }, { "regex": "RX-51 N900", "model": "N900" }, { "regex": "(?: )?(Nokia500|nokiaasha500(?:dualsim)?)(?: Build|[_);/])", "model": "Asha 500" }, { "regex": "Nokia5130c(?:-2)?", "model": "5130 XpressMusic" }, { "regex": "Nokia5230", "model": "Nuron" }, { "regex": "Nokia5233", "model": "5233" }, { "regex": "Nokia5800d-1", "model": "5800 XpressMusic" }, { "regex": "Nokia6210Navigator", "model": "Navigator" }, { "regex": "Nokia8800e?", "model": "Sapphire Arte" }, { "regex": "NOKIA-RH-17", "model": "2280" }, { "regex": "NOKIA-RH-27", "model": "6225" }, { "regex": "NOKIA-RH-34", "model": "6585" }, { "regex": "NOKIA-RH-48", "model": "3105" }, { "regex": "NOKIA-RM-11", "model": "3205" }, { "regex": "Nokia808 ?PureView", "model": "808 PureView" }, { "regex": "Nokia ?([0-9]{4})c(?:-)?", "model": "$1 Classic" }, { "regex": "Nokia ?([0-9]{4})s(?:-)?", "model": "$1 Slide" }, { "regex": "Nokia[ _]?([0-9]{4})[ _]?Flip", "model": "$1 Flip" }, { "regex": "Nokia[ _]?([0-9]{4})[ _]?V[ _]?Flip", "model": "$1 V Flip" }, { "regex": "Nokia ?([0-9]{4})", "model": "$1" }, { "regex": "(?: )?Nokia([235][0-9]{2})(?: Build|[_);/])", "model": "Asha $1" }, { "regex": "Nokia([CEX]-?[0-9]{1,2}i?)-[0-9]{1,2}u?(?: Build|[_);/])", "model": "$1" }, { "regex": "Nokia;? 520T", "model": "Lumia 520T" }, { "regex": "RM-91[45]", "model": "Lumia 520" }, { "regex": "RM-997|Nokia 526", "model": "Lumia 526" }, { "regex": "RM-846", "model": "Lumia 620" }, { "regex": "RM-97[68]", "model": "Lumia 630" }, { "regex": "RM-97[45]", "model": "Lumia 635" }, { "regex": "RM-1027", "model": "Lumia 636" }, { "regex": "NOKIA;? 710", "model": "Lumia 710" }, { "regex": "Nokia;? 720T", "model": "Lumia 720T" }, { "regex": "RM-885", "model": "Lumia 720" }, { "regex": "Lumia 730", "model": "Lumia 730" }, { "regex": "RM-103[89]", "model": "Lumia 735" }, { "regex": "Nokia;? 800C", "model": "Lumia 800C" }, { "regex": "Nokia;? 800", "model": "Lumia 800" }, { "regex": "Nokia 820", "model": "Lumia 820" }, { "regex": "RM-984", "model": "Lumia 830" }, { "regex": "Nokia;? 900", "model": "Lumia 900" }, { "regex": "(RM-82[12]|Nokia;? 920)(?: Build|[_);/])", "model": "Lumia 920" }, { "regex": "(RM-89[23]|RM-910|Nokia;? 925)(?: Build|[a_);/])", "model": "Lumia 925" }, { "regex": "Lumia 929", "model": "Lumia Icon" }, { "regex": "RM-1045", "model": "Lumia 930" }, { "regex": "(ARM; 909|NOKIA;? 909|NOKIA; id300)(?: Build|[_);/])", "model": "Lumia 1020" }, { "regex": "NOKIA;? 1520\\.1", "model": "Lumia 1520.1" }, { "regex": "Nokia T([12]0|21)", "device": "tablet", "model": "T$1" }, { "regex": "Streaming (Stick 800|Box 8000)(?:[);/ ]|$)", "device": "tv", "model": "Streaming $1" }, { "regex": "Nokia ([A-Za-z0-9\\. ]+)(?: Build|\\))", "model": "$1" }, { "regex": "Nokia(N[0-9]+)", "model": "$1" }, { "regex": "Nokia-([a-z0-9]+)", "model": "N$1" }, { "regex": "NOKIA; (?!Qt;)([a-z0-9\\- ]+)", "model": "$1" }, { "regex": "NOKIA[ _]?([a-z0-9-]+)", "model": "$1" }, { "regex": "NOKIA/([a-z0-9 ]+)", "model": "$1" }, { "regex": "(Lumia [a-z0-9-]+ XL)", "device": "phablet", "model": "$1" }, { "regex": "(Lumia [a-z0-9-]+)", "model": "$1" }, { "regex": "Maemo RX-51 ([a-z0-9]+)", "model": "$1" }, { "regex": "Maemo RX-34", "model": "N800" }, { "regex": "NokiaInternal|Nokia-WAP-Toolkit|Nokia-MIT-Browser|Nokia Mobile|Nokia Browser|Nokia/Series", "model": "" }, { "regex": "portalmmm/2\\.0 (N7[37]|NK[a-z0-9]+)", "model": "$1" }, { "regex": "nok([0-9]+)", "model": "$1" }, { "regex": "Symbian.*\\s([a-z0-9]+)$", "device": "feature phone", "model": "$1" } ] }, "CnM": { "regex": "CnM ", "device": "tablet", "models": [ { "regex": "CnM[ -](?:Touchpad|TP)[ -]([0-9.]+)", "model": "Touchpad $1" } ] }, "RIM": { "regex": "BB10;|BlackBerry|rim[0-9]+|PlayBook|STV100-[1234]|STH100-[12]|BBA100-[12]|BBB100-[1234567]|BBD100-[126]|BB[EF]100-[123456789]|BB[CGH]100-1", "device": "smartphone", "models": [ { "regex": "BBA100-[12]", "model": "BlackBerry DTEK60" }, { "regex": "BBB100-[1234567]", "model": "KEYone" }, { "regex": "BBC100-1", "model": "Aurora" }, { "regex": "BBD100-[126]|BlackBerry Motion", "model": "Motion" }, { "regex": "BBE100-[123456789]", "model": "KEY2 LE" }, { "regex": "BBF100-[1234567]|BlackBerry Key2", "model": "KEY2" }, { "regex": "BBF100-8", "model": "KEY2 Silver" }, { "regex": "BBF100-9", "model": "KEY2 Black" }, { "regex": "BBG100-1", "model": "Evolve" }, { "regex": "BBH100-1|Evolve X", "model": "Evolve X" }, { "regex": "(?:BlackBerry )?(9000|9790)", "model": "Bold $1" }, { "regex": "STV100-[1234]", "model": "BlackBerry Priv" }, { "regex": "STH100-[12]", "model": "BlackBerry DTEK50" }, { "regex": "BB10; ([a-z0-9\\- ]+)\\)", "model": "BlackBerry $1" }, { "regex": "PlayBook.+RIM Tablet OS", "model": "BlackBerry Playbook", "device": "tablet" }, { "regex": "BlackBerry(?: )?([a-z0-9]+)", "model": "BlackBerry $1" }, { "regex": "rim([0-9]+)", "model": "BlackBerry $1" }, { "regex": "9300", "model": "Curve 3G 9300" }, { "regex": "(8520|8530|9220|9320|9360)", "model": "Curve $1" }, { "regex": "9630", "model": "Tour 9630" }, { "regex": "9720", "model": "9720" }, { "regex": "(9800|9860)", "model": "Torch $1" }, { "regex": "BlackBerry", "model": "BlackBerry" } ] }, "Ghia": { "regex": "GHIA|QS702|SVEGLIO[ _][QH]1|VECTOR10\\.1|GTKIDS7[BVR]?|(?:A7_WF|GTA7(?:WF|PLUS)|VENUS7|TREO_TAB8G?|VECTOR_SLIM|GTAB718|GTABPND|GTABKIDS|GTVR10S|AXIS7_SLIM|AXIS7_LED|4104116N|GK133M3)(?:[);/ ]|$)", "device": "tablet", "models": [ { "regex": "SVEGLIO[ _]([QH]1)", "model": "Sveglio $1", "device": "smartphone" }, { "regex": "QS702", "model": "QS702", "device": "smartphone" }, { "regex": "GHIA_ZEUS_3G", "model": "Zeus 3G", "device": "smartphone" }, { "regex": "GHIA[ _](L1)", "model": "$1", "device": "smartphone" }, { "regex": "VECTOR_SLIM", "model": "Vector Slim" }, { "regex": "GHIA_AXIS7P", "model": "Axis 7P" }, { "regex": "AXIS7_SLIM", "model": "Axis 7 Slim" }, { "regex": "AXIS7_LED", "model": "Axis 7 LED" }, { "regex": "GHIA_AXIS7_3G", "model": "Axis 7 3G" }, { "regex": "GHIA_AXIS7", "model": "Axis 7" }, { "regex": "A7_WF", "model": "A7 WiFi" }, { "regex": "VECTOR10\\.1", "model": "Vector 10.1\"" }, { "regex": "GTA7WF", "model": "A7 ROJA" }, { "regex": "GTA7PLUS", "model": "A7 Plus" }, { "regex": "TREO_TAB8G", "model": "TREO TAB8G" }, { "regex": "GTKIDS7[ABVR]?|GTABKIDS", "model": "GT KIDS 7" }, { "regex": "GTVR10S", "model": "Vector 10.1\" Slim" }, { "regex": "GTABPND", "model": "Kids Panda" }, { "regex": "VENUS7", "model": "VENUS 7" }, { "regex": "4104116N", "model": "Any Diez.1" }, { "regex": "GHIA[ _]?(47458|VECTOR_3G)", "model": "$1" }, { "regex": "(GTAB718|GK133M3)", "model": "$1" } ] }, "Palm": { "regex": "(?:Pre|Pixi)/(\\d+)\\.(\\d+)|Palm|Treo|Xiino|PVG100(?:E_RU|E)?(?:[);/ ]|$)", "device": "smartphone", "models": [ { "regex": "((?:Pre|Pixi))/(\\d+\\.\\d+)", "model": "$1 $2" }, { "regex": "Palm(?:[ -])?((?!OS|Source|scape)[a-z0-9]+)", "model": "$1" }, { "regex": "Treo([a-z0-9]+)", "model": "Treo $1" }, { "regex": "Tungsten", "model": "Tungsten" }, { "regex": "PVG100", "model": "Pepito" }, { "regex": "Xiino|Palmscape", "model": "" } ] }, "Compaq": { "regex": "(?:CT101|CT1085_32GB)(?:[);/ ]|$)", "device": "tablet", "models": [ { "regex": "(CT1085)_32GB", "model": "$1" }, { "regex": "(CT101)", "model": "$1" } ] }, "HP": { "regex": "Hewlett-Packard|HP Engage|HP/HP|HP Chromebook|HP EliteBook|TouchPad/\\d+\\.\\d+|hp-tablet|HP ?iPAQ|webOS.*P160U|HP (?:Pro )?Slate|Slate 21|Slate 10|HP [78]|HP 10 Plus|Compaq [7|8]|HP; [^;/)]+|cm_tenderloin", "device": "smartphone", "models": [ { "regex": "HP Slate 6 Voice Tab", "model": "Slate 6 VoiceTab", "device": "phablet" }, { "regex": "HP 10 Plus", "model": "10 Plus", "device": "tablet" }, { "regex": "HP ([78][^)/;]*)(?: Build|\\))", "model": "Slate $1", "device": "tablet" }, { "regex": "Slate 21 Pro", "model": "Slate 21 Pro", "device": "tablet" }, { "regex": "Slate 21", "model": "Slate 21", "device": "tablet" }, { "regex": "Slate 10 HD", "model": "Slate 10 HD", "device": "tablet" }, { "regex": "cm_tenderloin", "model": "Touch 9.7\" WiFi", "device": "tablet" }, { "regex": "Compaq 8200 Elite SFF PC", "device": "desktop", "model": "Compaq 8200 Elite SFF PC" }, { "regex": "Compaq ([78][^/;]*) Build", "model": "Compaq $1", "device": "tablet" }, { "regex": "HP Pro Slate 8", "model": "Pro Slate 8", "device": "tablet" }, { "regex": "HP Slate ?(.+) Build", "model": "Slate $1", "device": "tablet" }, { "regex": "HP Slate ?([0-9]+)", "model": "Slate $1", "device": "tablet" }, { "regex": "TouchPad/(\\d+\\.\\d+)|hp-tablet", "model": "TouchPad", "device": "tablet" }, { "regex": "HP; ([^;/)]+)", "model": "$1" }, { "regex": "HP ?iPAQ ?([a-z0-9]+)", "model": "iPAQ $1" }, { "regex": "webOS.*(P160U)", "model": "Veer" }, { "regex": "HP ProBook (6560b)", "device": "desktop", "model": "ProBook $1" }, { "regex": "Engage One Pro AIO", "device": "desktop", "model": "Engage One Pro AIO" }, { "regex": "Chromebook (11 G5|x360 11 G1 EE|13 G1|x2)", "device": "desktop", "model": "Chromebook $1" }, { "regex": "HP EliteBook (820 G2|8470p)", "device": "desktop", "model": "EliteBook $1" }, { "regex": "Z240 Tower Workstation", "device": "desktop", "model": "Z240 Tower Workstation" } ] }, "TiPhone": { "regex": "TiPhone ?([a-z0-9]+)", "device": "smartphone", "model": "$1" }, "TiVo": { "regex": "TIVO[ ,-]", "device": "tv", "models": [ { "regex": "STREAM 4K", "model": "Stream 4K" }, { "regex": "TCD8F6000", "model": "TCD8F6000" }, { "regex": "(?:TiVo|VirginMedia), (?:OnDemand_)?([a-z0-9]+), (?:wired|wireless)", "model": "$1" }, { "regex": "TiVo-([a-z0-9]+)-([a-z0-9]+)", "model": "$2" } ] }, "Apple": { "regex": "(?:iTunes-)?Apple[ _]?TV|Apple/|(?:Apple-|iTunes-)?(?<!like )(?:iPad|iPhone)(?!\\: Build/)|iPh(?:[0-9]|1[0-7]),[0-9]|CFNetwork|HomePod|AirPlay|AirPodcasts/|Watch ?OS|Watch1,[12]|MDCR_i?Mac|ICRU_iP(?:ad|hone)|Mac OS X[,;]|OSX/|macOS,|for Apple Watch", "models": [ { "regex": "(?:HomePod|AirPodcasts/)", "device": "smart speaker", "model": "HomePod" }, { "regex": "AirPlay", "device": "smart speaker", "model": "" }, { "regex": "Watch1,1", "device": "wearable", "model": "Watch 38mm" }, { "regex": "Watch1,2", "device": "wearable", "model": "Watch 42mm" }, { "regex": "Watch2,6", "device": "wearable", "model": "Watch Series 1 38mm" }, { "regex": "Watch2,7", "device": "wearable", "model": "Watch Series 1 42mm" }, { "regex": "Watch2,3", "device": "wearable", "model": "Watch Series 2 38mm" }, { "regex": "Watch2,4", "device": "wearable", "model": "Watch Series 2 42mm" }, { "regex": "Watch3,[13]", "device": "wearable", "model": "Watch Series 3 38mm" }, { "regex": "Watch3,[24]", "device": "wearable", "model": "Watch Series 3 42mm" }, { "regex": "Watch5,(?:9|11)", "device": "wearable", "model": "Watch SE 40mm" }, { "regex": "Watch5,1[02]", "device": "wearable", "model": "Watch SE 44mm" }, { "regex": "Watch6,1[02]", "device": "wearable", "model": "Watch SE (Gen 2) 40mm" }, { "regex": "Watch6,1[13]", "device": "wearable", "model": "Watch SE (Gen 2) 44mm" }, { "regex": "Watch6,1[46]", "device": "wearable", "model": "Watch Series 8 41mm" }, { "regex": "Watch6,1[57]", "device": "wearable", "model": "Watch Series 8 45mm" }, { "regex": "Watch6,18", "device": "wearable", "model": "Watch Ultra" }, { "regex": "Watch7,5", "device": "wearable", "model": "Watch Ultra 2" }, { "regex": "Watch([456]),[13]", "device": "wearable", "model": "Watch Series $1 40mm" }, { "regex": "Watch([456]),[24]", "device": "wearable", "model": "Watch Series $1 44mm" }, { "regex": "Watch6,[68]", "device": "wearable", "model": "Watch Series 7 41mm" }, { "regex": "Watch6,[79]", "device": "wearable", "model": "Watch Series 7 45mm" }, { "regex": "Watch7,8", "device": "wearable", "model": "Watch Series 10 42mm" }, { "regex": "Watch7,9", "device": "wearable", "model": "Watch Series 10 46mm" }, { "regex": "Watch7,10", "device": "wearable", "model": "Watch Series 10 42mm" }, { "regex": "Watch7,11", "device": "wearable", "model": "Watch Series 10 46mm" }, { "regex": "Watch7,1", "device": "wearable", "model": "Watch Series 9 41mm" }, { "regex": "Watch7,3", "device": "wearable", "model": "Watch Series 9 41mm" }, { "regex": "Watch7,2", "device": "wearable", "model": "Watch Series 9 45mm" }, { "regex": "Watch7,4", "device": "wearable", "model": "Watch Series 9 45mm" }, { "regex": "(:?Apple Watch|watchOS)", "device": "wearable", "model": "Watch" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacPro1(?:%2C|,)1", "device": "desktop", "model": "Mac Pro (2006)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacPro2(?:%2C|,)1", "device": "desktop", "model": "Mac Pro (2007)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacPro3(?:%2C|,)1", "device": "desktop", "model": "Mac Pro (2008)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacPro4(?:%2C|,)1", "device": "desktop", "model": "Mac Pro (2009)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacPro5(?:%2C|,)1", "device": "desktop", "model": "Mac Pro (2010-2012)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?Mac14(?:%2C|,)8", "device": "desktop", "model": "Mac Pro (2023)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac5(?:%2C|,)1", "device": "desktop", "model": "iMac (2006)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac5(?:%2C|,)2", "device": "desktop", "model": "iMac 17\" (2006)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac6(?:%2C|,)1", "device": "desktop", "model": "iMac 24\" (2006)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac7(?:%2C|,)1", "device": "desktop", "model": "iMac (2007)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac8(?:%2C|,)1", "device": "desktop", "model": "iMac (2008)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac9(?:%2C|,)1", "device": "desktop", "model": "iMac (2009)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac10(?:%2C|,)1", "device": "desktop", "model": "iMac (2009)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac11(?:%2C|,)1", "device": "desktop", "model": "iMac 27\" (2009)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac11(?:%2C|,)2", "device": "desktop", "model": "iMac 21.5\" (2010)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac11(?:%2C|,)3", "device": "desktop", "model": "iMac 27\" (2010)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac12(?:%2C|,)1", "device": "desktop", "model": "iMac 21.5\" (2011)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac12(?:%2C|,)2", "device": "desktop", "model": "iMac 27\" (2011)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac13(?:%2C|,)1", "device": "desktop", "model": "iMac 21.5\" (2012-2013)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac13(?:%2C|,)2", "device": "desktop", "model": "iMac 27\" (2012)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac14(?:%2C|,)[13]", "device": "desktop", "model": "iMac 21.5\" (2013)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac14(?:%2C|,)2", "device": "desktop", "model": "iMac 27\" (2013)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac14(?:%2C|,)4", "device": "desktop", "model": "iMac 21.5\" (2014)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac17(?:%2C|,)1", "device": "desktop", "model": "iMac 27\" (2015)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac18(?:%2C|,)[12]", "device": "desktop", "model": "iMac 21.5\" (2017)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac18(?:%2C|,)3", "device": "desktop", "model": "iMac 27\" (2017)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac19(?:%2C|,)1", "device": "desktop", "model": "iMac 27\" (2019)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac19(?:%2C|,)2", "device": "desktop", "model": "iMac 21.5\" (2019)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac20(?:%2C|,)[12]", "device": "desktop", "model": "iMac 27\" (2020)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMac21(?:%2C|,)[12]", "device": "desktop", "model": "iMac 24\" (2021)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?Mac15(?:%2C|,)[45]", "device": "desktop", "model": "iMac 24\" (2023)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?iMacPro1(?:%2C|,)1", "device": "desktop", "model": "iMac Pro 27\" (2017)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacBook1(?:%2C|,)1", "device": "desktop", "model": "MacBook 13\" (2006)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacBook2(?:%2C|,)1", "device": "desktop", "model": "MacBook 13\" (2006-2007)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacBook3(?:%2C|,)1", "device": "desktop", "model": "MacBook 13\" (2007)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacBook[45](?:%2C|,)1", "device": "desktop", "model": "MacBook 13\" (2008)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacBook5(?:%2C|,)2", "device": "desktop", "model": "MacBook 13\" (2009)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacBook6(?:%2C|,)1", "device": "desktop", "model": "MacBook 13\" (2009)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacBook7(?:%2C|,)1", "device": "desktop", "model": "MacBook 13\" (2010)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacBook8(?:%2C|,)1", "device": "desktop", "model": "MacBook 12\" (2015)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacBook9(?:%2C|,)1", "device": "desktop", "model": "MacBook 12\" (2016)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacBookAir1(?:%2C|,)1", "device": "desktop", "model": "MacBook Air 13\" (2008)" }, { "regex": "(?:MDCR_|ICRU_|Apple-)?MacBookAir2(?:%2C|,)1",