browserslist-useragent vs browserslist-useragent-regexp

November 12, 2022 ยท View on GitHub

import blua from 'browserslist-useragent'

const { matchesUA } = blua const defaultsRegex = /Edge?/(10[4-9]|1[1-9]\d|[2-9]\d\d|\d{4,})(.\d+|)(.\d+|)|Firefox/(10[2-9]|1[1-9]\d|[2-9]\d\d|\d{4,}).\d+(.\d+|)|Chrom(ium|e)/(10[3-9]|1[1-9]\d|[2-9]\d\d|\d{4,}).\d+(.\d+|)|Maci.* Version/(15.([6-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,}).\d+)([,.]\d+|)( Mobile/\w+|) Safari/|Chrome.+OPR/(9\d|\d{3,}).\d+.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(14._|(1[5-9]|[2-9]\d|\d{3,})[.]\d+)([.]\d+|)|Opera Mini|Android:? /-(.\d+|)(.\d+|)|Mobile Safari.+OPR/(6[4-9]|[7-9]\d|\d{3,}).\d+.\d+|Android.+Firefox/(10[5-9]|1[1-9]\d|[2-9]\d\d|\d{4,}).\d+(.\d+|)|Android.+Chrom(ium|e)/(10[6-9]|1[1-9]\d|[2-9]\d\d|\d{4,}).\d+(.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(13.([4-9]|\d{2,})|(1[4-9]|[2-9]\d|\d{3,}).\d+).\d+|SamsungBrowser/(1[7-9]|[2-9]\d|\d{3,}).\d+|Android.+MQQBrowser/(13(.([1-9]|\d{2,})|)|(1[4-9]|[2-9]\d|\d{3,})(.\d+|))(.\d+|)|K[Aa][Ii]OS/(2.([5-9]|\d{2,})|([3-9]|\d{2,}).\d+)(.\d+|)/ const useragents = [ /**

  • IE 6 / 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)', /*
  • IE 7 / 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)', /*
  • IE 8 / 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)', /*
  • IE 8 Compatability Mode / 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)', /*
  • IE 9 / 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)', /*
  • IE 9 Compatability Mode / 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)', /*
  • IE 10 / 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)', /*
  • IE 10 Compatability Mode / 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)', /*
  • IE 11 / 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko', /*
  • IE 11 Compatability Mode / 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)', /*
  • Edge on EdgeHTML / 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363', /*
  • Edge on Chromium / 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 Edg/80.0.361.62', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.25', /*
  • Firefox Desktop / 'Mozilla/5.0 (Windows NT 5.2; rv:42.0) Gecko/20100101 Firefox/42.0', /*
  • Chrome Desktop / 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36', /*
  • Safari Desktop / 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.3 Safari/605.1.15', /*
  • Safari iPad Desktop-like / 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1 Safari/605.1.15', // Weird case with comma 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6,2 Safari/605.1.15', /*
  • Opera Desktop on Presto / 'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11', 'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8) Presto/2.12.388 Version/12.15', /*
  • Opera Desktop on Chromium / 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 OPR/15.0.1147.153', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 OPR/91.0.4516.16', /*
  • iOS iPhone Safari / 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1', /*
  • Opera Mini / 'Opera/9.80 (Android; Opera Mini/12.0.1987/37.7327; U; pl) Presto/2.12.423 Version/12.16', /*
  • Android / 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SCH-I535 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', /*
  • Opera Mobile / 'Opera/9.80 (S60; SymbOS; Opera Mobi/SYB-1107071606; U; en) Presto/2.8.149 Version/11.10', 'Opera/12.02 (Android 4.1; Linux; Opera Mobi/ADR-1111101157; U; en-US) Presto/2.9.201 Version/12.02', /*
  • IE Mobile */ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)', 'Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 635) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537' ]

console.time('regex') useragents.filter(_ => defaultsRegex.test(_)) console.timeEnd('regex')

console.time('matchesUA') useragents.filter(_ => matchesUA(_, { browsers: ['defaults'] })) console.timeEnd('matchesUA')

/* Results:

regex: 1.824ms matchesUA: 39.869ms */