browserslist-useragent-regexp icon indicating copy to clipboard operation
browserslist-useragent-regexp copied to clipboard

Unnecessary escape characters in regular expression

Open Michael-1 opened this issue 4 years ago • 5 comments

In the generated regular expression, dot characters in ranges are unnecessarily escaped. [_\.] can be written simply as [_.], as the dot character is always interpreted literally in a range [].

Michael-1 avatar Jun 29 '20 10:06 Michael-1

Our ESLint rules picked this up, as well. Minor change, but every byte helps.

elliottregan avatar Sep 25 '20 16:09 elliottregan

@Michael-1 @elliottregan Hi! Can you provide example for reproduction ?

dangreen avatar Oct 02 '20 08:10 dangreen

@dangreen This is a generated file that gets flagged by ESLint's rule:

module.exports = /((CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(12[_\.]2|12[_\.]([3-9]|\d{2,})|12[_\.]4|12[_\.]([5-9]|\d{2,})|(1[3-9]|[2-9]\d|\d{3,})[_\.]\d+|13[_\.]0|13[_\.]([1-9]|\d{2,})|13[_\.]3|13[_\.]([4-9]|\d{2,})|(1[4-9]|[2-9]\d|\d{3,})[_\.]\d+)(?:[_\.]\d+)?)|(SamsungBrowser\/(10\.1|10\.([2-9]|\d{2,})|(1[1-9]|[2-9]\d|\d{3,})\.\d+))|((Chromium|Chrome)\/(79\.0|79\.([1-9]|\d{2,})|([8-9]\d|\d{3,})\.\d+)(?:\.\d+)?)|(Version\/(13\.0|13\.([1-9]|\d{2,})|(1[4-9]|[2-9]\d|\d{3,})\.\d+)(?:\.\d+)? Safari\/)|(Firefox\/(72\.0|72\.([1-9]|\d{2,})|(7[3-9]|[8-9]\d|\d{3,})\.\d+)\.\d+)|(Firefox\/(72\.0|72\.([1-9]|\d{2,})|(7[3-9]|[8-9]\d|\d{3,})\.\d+)(pre|[ab]\d+[a-z]*)?)/;

Demo

elliottregan avatar Oct 02 '20 18:10 elliottregan

@elliottregan @Michael-1 fixed in v2.1.1

dangreen avatar Oct 17 '20 05:10 dangreen

On version 2.1.1 there are still some unnecessary characters.

My browserlistrc last 2 versions not dead not ie >= 0

eslint error: Unnecessary escape character: \/ no-useless-escape

/((CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(13[_.]4|13[_.]([5-9]|\d{2,})|13[_.]7|13[_.]([8-9]|\d{2,})|(1[4-9]|[2-9]\d|\d{3,})[_.]\d+|14[_.]0|14[_.]([1-9]|\d{2,})|14[_.]2|14[_.]([3-9]|\d{2,})|(1[5-9]|[2-9]\d|\d{3,})[_.]\d+)(?:[_.]\d+)?)|(Opera Mini(?:\/att)?\/?(\d+)?(?:\.\d+)?(?:\.\d+)?)|(Opera\/.+Opera Mobi.+Version\/(59\.0|59\.([1-9]|\d{2,})|([6-9]\d|\d{3,})\.\d+))|(Opera\/(59\.0|59\.([1-9]|\d{2,})|([6-9]\d|\d{3,})\.\d+).+Opera Mobi)|(Opera Mobi.+Opera(?:\/|\s+)(59\.0|59\.([1-9]|\d{2,})|([6-9]\d|\d{3,})\.\d+))|(SamsungBrowser\/(12\.0|12\.([1-9]|\d{2,})|(1[3-9]|[2-9]\d|\d{3,})\.\d+))|(Edge\/(86(?:\.0)?|86(?:\.([1-9]|\d{2,}))?|(8[7-9]|9\d|\d{3,})(?:\.\d+)?))|((Chromium|Chrome)\/(86\.0|86\.([1-9]|\d{2,})|(8[7-9]|9\d|\d{3,})\.\d+)(?:\.\d+)?)|(IEMobile[ \/](11\.0|11\.([1-9]|\d{2,})|(1[2-9]|[2-9]\d|\d{3,})\.\d+))|(Version\/(13\.1|13\.([2-9]|\d{2,})|(1[4-9]|[2-9]\d|\d{3,})\.\d+|14\.0|14\.([1-9]|\d{2,})|(1[5-9]|[2-9]\d|\d{3,})\.\d+)(?:\.\d+)? Safari\/)|(Firefox\/(82\.0|82\.([1-9]|\d{2,})|(8[3-9]|9\d|\d{3,})\.\d+)\.\d+)|(Firefox\/(82\.0|82\.([1-9]|\d{2,})|(8[3-9]|9\d|\d{3,})\.\d+)(pre|[ab]\d+[a-z]*)?)/

KrzysztofWidackiPracuj avatar Dec 18 '20 10:12 KrzysztofWidackiPracuj

@KrzysztofWidackiPracuj Hi. Please try v4.0.0-beta.1.

dangreen avatar Nov 06 '22 22:11 dangreen

Using defaults browserslist-useragent-regexp --allowHigherVersions returns:

/Edge?\/(10[7-9]|1[1-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Firefox\/(10[2-9]|1[1-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(10[6-9]|1[1-9]\d|[2-9]\d{2}|\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[1-9]|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(14[._]([5-9]|\d{2,})|(1[5-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Opera Mini|Android:?[ /\-](10[89]|1[1-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/(7[2-9]|[89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(10[7-9]|1[1-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(10[89]|1[1-9]\d|[2-9]\d{2}|\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[89]|[2-9]\d|\d{3,})\.\d+|Android.+MQ{2}Browser\/(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+|)/

which includes [ /\-] and thus an Unnecessary escape character: \- at 1:495. I'm using

  • "browserslist": "4.21.4"
  • "browserslist-useragent-regexp": "4.0.0"

so @dangreen, can this issue be reopened for this to be fixed or shall I create a new ticket?

dargmuesli avatar Dec 22 '22 16:12 dargmuesli

@dargmuesli Hi. Fixed in [email protected]. Reinstall browserslist-useragent-regexp to trigger ua-regexes-lite update, or just install it as dev dependency.

dangreen avatar Dec 22 '22 17:12 dangreen

Great! Thank you for the quick fix :)

dargmuesli avatar Dec 22 '22 18:12 dargmuesli