如何在JavaScript中克隆一個給定的正則表示式?


JavaScript的正則表示式支援被廣泛認為是世界上最好的之一,但它在一個方面有所欠缺:沒有內建方法來克隆正則表示式。當您需要建立一個與現有正則表示式類似但稍有改動的新的正則表示式時,這可能會成為一個問題。

問題在於正則表示式是物件,因此不能簡單地透過將一個賦值給另一個來複制。考慮以下程式碼:

var regex1 = /foo/;
var regex2 = regex1;
regex2 === regex1; // true

在此程式碼中,我們建立了兩個相同的正則表示式。但是,如果我們想對其中一個進行小的更改怎麼辦?

regex2 = /bar/;
regex1 === regex2; // false

現在這兩個正則表示式不同了,即使它們最初是彼此的副本。這是因為正則表示式是可變的:它們可以在建立後更改。

使用正則表示式字面量進行克隆

克隆正則表示式的一種方法是建立一個與現有正則表示式類似的新正則表示式字面量。例如,如果我們有這樣的正則表示式:

var regex1 = /foo/;

我們可以使用正則表示式字面量建立一個與之相同的新正則表示式:

var regex2 = /foo/;
regex1 === regex2; // true

此方法簡單直接,但僅適用於正則表示式字面量(即,它不是使用新的RegExp()建構函式建立的)。

使用RegExp()建構函式克隆正則表示式

克隆正則表示式的另一種方法是使用RegExp()建構函式。這允許我們建立一個基於現有正則表示式但有一些更改的新正則表示式。例如,如果我們有這樣的正則表示式:

var regex1 = /foo/;

我們可以使用RegExp()建構函式建立一個與之相同的新正則表示式:

var regex2 = new RegExp(regex1);
regex1 === regex2; // true

此方法比前一種方法稍微複雜一些,但它具有能夠克隆非字面量正則表示式的優勢。

為什麼我們要克隆正則表示式?

克隆正則表示式有幾個好處。首先,如果您需要建立許多類似的正則表示式,它可以節省您的時間。其次,如果您需要對現有正則表示式進行小的更改,它可以幫助您避免錯誤。最後,它可以透過為正則表示式賦予描述性名稱來使您的程式碼更具可讀性。

克隆正則表示式的缺點

克隆正則表示式的缺點之一是它可能會使您的程式碼更復雜。例如,如果您有這樣的正則表示式:

var regex1 = /foo/;

並且您想建立一個類似於它的新正則表示式,但設定了不區分大小寫的標誌,則需要執行以下操作:

var regex2 = new RegExp(regex1, 'i');

這比簡單地建立一個設定了不區分大小寫標誌的新正則表示式更復雜:

var regex2 = /foo/i;

總之,克隆正則表示式可能是一個有用的工具,但它也有一些權衡。它可能會使您的程式碼更復雜,但它也可以節省您的時間並幫助您避免錯誤。

更新於:2022年8月4日

264 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.