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

时间:2012-06-14 12:10:29

标签: javascript regex compare

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

var regexp = /a/;

为什么

console.log(/a/ == /a/);

甚至

var regexp1 = /a/;
var regexp2 = /a/;
console.log(regexp1 == regexp2);

都返回false

4 个答案:

答案 0 :(得分:31)

试试这个:

String(regexp1) === String(regexp2))

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

答案 1 :(得分:8)

<强> “问题”:

regexobject - 引用类型,因此比较由引用完成,这是两个不同的对象。< / p>

console.log(typeof /a/); // "object"
  

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

MDN

<强>解决方案:

​var a = /a/;
var b = /a/;
console.log(​​​a.toString() === b.toString()); // true! yessss!

Live DEMO

强制toString() regex的另一个“黑客”是:

console.log(a + "" === b + "");​

答案 2 :(得分:3)

只是一个猜测 - 但JavaScript不会为你的正则表达式创建一个RegExp对象,因此你创建了两个不同的对象(即使它们具有相同的“值”)它们实际上是不同的吗?

答案 3 :(得分:2)

对于原始数据类型,如int,string,boolean javascript知道要比较什么,但对于像date或regex这样的对象,运算符只能查看内存中的位置,因为你独立定义你的正则表达式,它们在内存中有两个不同的位置所以他们不平等。