如何比较两个正则表达式?

sp0*_*00m 18 javascript regex compare

因为您可以在变量中存储正则表达式

var regexp = /a/;
Run Code Online (Sandbox Code Playgroud)

为什么

console.log(/a/ == /a/);
Run Code Online (Sandbox Code Playgroud)

乃至

var regexp1 = /a/;
var regexp2 = /a/;
console.log(regexp1 == regexp2);
Run Code Online (Sandbox Code Playgroud)

都回归false

ios*_*seb 36

试试这个:

String(regexp1) === String(regexp2))
Run Code Online (Sandbox Code Playgroud)

你变得虚假,因为这两个是不同的对象.


gdo*_*ica 8

"问题":

regex是一个object- 引用类型,因此比较是通过引用完成的,这是两个不同的对象.

console.log(typeof /a/); // "object"
Run Code Online (Sandbox Code Playgroud)

如果两个操作数都是对象,则JavaScript比较内部引用,当操作数引用内存中的同一对象时,这些内部引用相等.

MDN

解:

?var a = /a/;
var b = /a/;
console.log(???a.toString() === b.toString()); // true! yessss!
Run Code Online (Sandbox Code Playgroud)

现场演示

另一种"黑客"给力toString()regexES是:

console.log(a + "" === b + "");?
Run Code Online (Sandbox Code Playgroud)