我一直很喜欢探索正则表达式,因为它们是学校从未教过的那些技能之一-您需要即时获取它们,弄乱它们并一路搞定。正则表达式非常强大,它们的一种功能称为反向引用,它实际上使您可以在同一正则表达式中使用匹配项。
解释反向引用的最简单方法是一个简单的目标:使用正则表达式来模拟解构。采取以下代码段:
const body = document.blah.body;
借助JavaScript解构等令人敬畏的新语言功能,编写上面代码的更好方法是:
const { body } = document.blah;
注意:作为一般的编程规则,使用正则表达式实现或模拟语言功能是一个非常糟糕的主意。但是,为了解释反向引用,它是完美的。
反向引用语法为\{number of match}
:
const code = "const body = document.blah.body;";
const destrcutured = code.replace(/const (\w+) = ([A-z\.]+)\.\1;/, "const { $1 } = $2;");
// const { body } = document.blah";
在上面的示例中,我们使用\1
引用同一表达式中的第一个匹配项。然后,我们使用$1
反映匹配的(\w+)
和$2
反映对象链( ([Az.]+)
)。你可以使用\{#}
语法使用任意数量的反向引用。请注意,反向引用会影响性能:某些工具(如VS Code)将不支持它们;它们会影响性能。Atom编辑器确实支持反向引用。
正则表达式始终是一种冒险,总是有很多东西要学习。我最喜欢的正则表达式部分是单个字符如何极大地改变结果-精简代码中的强大功能!
翻译自: https://davidwalsh.name/javascript-backreference-regex
今日福利????