I was surprised to see that
/a/ === /a/
evaluates to false in JavaScript. Reading through the specs:
Two regular expression literals in a program evaluate to regular
expression objects that never compare as === to each other even if the
two literals’ contents are identical.
Since === cannot be used to test for equality, how can equality of regular expressions be tested in JavaScript?
Here’s a function that fully tests all the relevant regex properties and makes sure it’s the right type of object:
And, since flags sometimes get added to the regex object with new features (as has happened since this original answer in 2012 – though the above code has been updated as of 2019), here’s a version that is a bit more future proof on future flags being added since it compares whatever flags are there rather than looking for a specific set of flags. It sorts the flags before comparing to allow for minor differences in how the regex was specified that wouldn’t not actually change functionality.