Javascript 如何检查2个regexp是否具有相同的记帐语法差异?

Javascript 如何检查2个regexp是否具有相同的记帐语法差异?,javascript,regex,Javascript,Regex,我正在将一个相当大的RegExp重构为一个返回RegExp的函数。作为向后兼容性测试,我将返回的RegExp的.source与旧RegExp的.source进行了比较: getRegExp(/* in the case requiring backward compatibility there's no arguments */) .source == oldRegExp.source 但是,我注意到旧的RegExp包含各种过多的反斜杠,比如[\.\w],而不是[.\w]。我想重构这

我正在将一个相当大的RegExp重构为一个返回RegExp的函数。作为向后兼容性测试,我将返回的RegExp的
.source
与旧RegExp的
.source
进行了比较:

getRegExp(/* in the case requiring backward compatibility there's no arguments */)
    .source == oldRegExp.source
但是,我注意到旧的RegExp包含各种过多的反斜杠,比如
[\.\w]
,而不是
[.\w]
。我想重构这样的代码,但是有很多,如果有一个类似的检查就好了(向后兼容性没有被破坏)。问题是,
/[\.\w]/.source!=/[。\w]/.source
。识别哪些反斜杠可以自动删除并不简单(
\.
[…]
之外是不同的,在其他一些情况下也可能不同)


你知道一些简单的方法吗?这似乎只能通过实际解析
.source
(将上面的示例与
/\[\.\w]\/
/\[.\w]\/
进行比较),但可能是我缺少了一些利用浏览器内置属性/方法的技巧。关键是,
'\''='''
是真的,因此使用这些不同语法定义的字符串存储为“规范化”值(
),我想知道是否这样“规范化”“模式可用于RegExp。

遗憾的是,比较两个正则表达式以确定它们是否相同与比较任何其他两段代码完全相同-即,硬

我所知道的唯一真正的方法是创建一套测试,每个测试都针对正则表达式的特定方面,并验证它是否正常工作。这不是一个简单的过程正则表达式是微妙而复杂的,有很多潜在的未实现的副作用。我最近不得不修复一个基于regex的地址解析器中的一些缺陷,在我对覆盖率感到满意之前,我进行了大约一千次单元测试。。。但是,当我开始改变正则表达式时,我的测试不断捕捉到东西


单元测试很差劲,而且很累也不好玩,但对于几乎所有的逻辑来说,它都有真正的价值,当使用像regex这样的强大工具时,我想说这是绝对重要的。

@ggorlen你能澄清一下
[.\w]
[\.\w]
有什么不同吗?见()。是的,反斜杠太多了哦,谢谢,我没意识到。这里有一些有用的资源,可能比上面的链接更好。正如Chris在下面提到的,我认为证明两个正则表达式是等价的可能会减少到@ggorlen,但不完全是这样。考虑<代码> ''== ' ' /CODE >是真的:这些是用不同的语法定义的相同的字符串值(<代码>)/代码>。我想知道RegExp是否有一个类似的“标准化”表示,这个表达式本身是可用的,并且可以比较(遗憾的是<代码>。源代码/代码>不是)。是的,我也在考虑测试。(事实上,我已经有很多了),就像你提到的,只是因为“未知”的报道而缺乏信心