我需要一個檢查任意正則表達式(作爲字符串)的正則表達式,返回捕獲組的數量。到目前爲止,我有...正則表達式來計算正則表達式中捕獲組的數量
arbitrary_regex.toString().match(/\((|[^?].*?)\)/g).length
它適用於某些情況下,假設任何以問號開頭的組是非捕獲。它也計算空組。
它不適用於包含在字符類中的括號,或括號中的括號以及可能的其他一些場景。
我需要一個檢查任意正則表達式(作爲字符串)的正則表達式,返回捕獲組的數量。到目前爲止,我有...正則表達式來計算正則表達式中捕獲組的數量
arbitrary_regex.toString().match(/\((|[^?].*?)\)/g).length
它適用於某些情況下,假設任何以問號開頭的組是非捕獲。它也計算空組。
它不適用於包含在字符類中的括號,或括號中的括號以及可能的其他一些場景。
修改您正則表達式,這樣它會匹配一個空字符串,然後匹配一個空字符串,看看它有多少組返回:
var num_groups = (new RegExp(regex.toString() + '|')).exec('').length - 1;
接受的答案是你應該什麼用於任何生產系統。不過,如果你想用樂趣解決它,你可以做到這一點,如下所示。它假定你想要的正則表達式的組數是正確的。
請注意,組的數量只是正則表達式中的非文字(
s的數量。我們要採取的策略是,不是匹配所有正確的(
,我們將分割爲之間的所有不正確的東西。
re.toString().split(/(\(\?|\\\[|\[(?:\\\]|.)*?\]|\\\(|[^(])+/g).length - 1
你可以看到它是如何工作的www.debuggex.com。
正則表達式的正則表達式... [Yo dawg](http://memearchive.net/memerial.net/5615/yo-dawg-i-herd-you-like-regex.jpg) – Kninnug