發(fā)布于:2021-01-15 13:33:37
0
486
0
我一直喜歡探索正則表達(dá)式,因為它們是那些學(xué)校里從未教過的技能之一——您需要隨時掌握它們,在此過程中搞混并修正它們。Regex的功能非常強(qiáng)大,它們具有的一個功能被稱為反向引用,它實際上允許您在同一個正則表達(dá)式中使用匹配。
解釋反向引用的最簡單方法是有一個簡單的目標(biāo):使用regex來模擬解構(gòu)。請看下面的代碼片段:
const body = document.blah.body;
有了一個很棒的新語言特性,比如JavaScript解構(gòu),寫上面的代碼更好的方法是:
const { body } = document.blah;
注意:作為一個通用的編程規(guī)則,使用正則表達(dá)式來實現(xiàn)或模擬語言特性是一個非常糟糕的想法。然而,為了解釋向后引用,它是完美的。
反向引用語法是{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來引用同一個表達(dá)式中的第一個匹配項。然后使用$1來反映匹配的(w+),使用$2來反映對象鏈(([A-z.]+))。你可以使用{#}語法使用任意數(shù)量的后向引用。要知道反向引用是對性能的征稅:一些實用程序,如VS Code不支持它們;Atom editor確實支持反向引用。
正則表達(dá)式總是一種冒險,總是有更多的東西需要學(xué)習(xí)。正則表達(dá)式中我最喜歡的部分是單個字符如何極大地改變結(jié)果——在少量代碼中如此強(qiáng)大!