2016-03-31 19 views
-1

Wenn JavaScript, /\.scss$/ eine Regex ist. Ich möchte überprüfen, ob eine Regex genau wie eine andere Regex ist, jedoch:Wie kann ich überprüfen, ob zwei reguläre Ausdrücke identisch sind?

/\.scss$/ === /\.scss$/ // false 

Wie kann ich das tun? Beachten Sie, dass mir die Übereinstimmung der Regex nicht wichtig ist. Es interessiert mich nur, wie die Regex definiert ist.

+0

'Typeof/\. SCSS $ /' 'ist "Objekt"' und zwei Objekte können nicht verglichen werden Gleichheitsoperatoren verwenden. – Tushar

Antwort

1

Verwendung .toString:

/\.scss$/.toString() === /\.scss$/.toString() // true 

Es ist einfacher, zu sehen, was los ist, wenn mit dem RegExp Objekt:

new RegExp("ab+c").toString() === new RegExp("ab+c").toString() // true 

während

new RegExp("ab+c") === new RegExp("ab+c") // false 
+1

'neue RegExp (" ab + c ") === neue RegExp (" ab + c ")' ist 'false' weil beide Objekte sind und' === 'keine Objekte vergleichen kann. – Tushar

+2

Die beiden Regex 'aa' und' a {2} 'sind gleich, wie können diese verglichen werden? 'toString()' wird hier fehlschlagen. – Tushar

+0

@Tushar Ich habe in der Frage geklärt. – sennett

0

Wie wäre es Quelle Attribut ?

/\.scss$/.source === /\.scss$/.source && /\.scss$/.flags === /\.scss$/.flags 

Es ist schneller als mit toString Funktion. http://jsperf.com/source-vs-tostring

enter image description here

+0

Dies funktioniert für Regexps mit keine Flags, aber 'source' enthält nicht die Flag-Informationen: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/source – sennett

+0

dann ich fügen Sie '&& /\.scss$/.flags ===/\. scss $ /. flags' hinzu – soonsuweb

Verwandte Themen