[英]Cannot re-use a pattern of a capturing group inside JavaScript regex
我的問題有點類似於這個問題。 但是,由於以下原因,我的問題有所不同:
我正在嘗試通過將表達式驗證為“平衡括號”來學習正則表達式。
平衡括號是一個表達式,其中每個
(
都用對應的)
例如,以下表達式是有效的:
(1+2)*(2+5)
(1+2(3+4)-6)/(2+4)
((()))
但是, (3+4()
是無效的。
為簡單起見,假設括號內的術語為數字和運算符。
我正在使用 JavaScript 正則表達式。 所以,我嘗試了下面的正則表達式。 但是,它沒有解決。
^(\((?:[^()]|\1*)\)[^()]*)+$
但是,當我嘗試下面的PCRE
正則表達式時,結果很好。
^(\((?:[^()]|(?1))*\)[^()]*)+$
兩個正則表達式的唯一語法差異是如何重新使用第一個捕獲組:JS 中的\\1
和 PCRE 中的(?1)
。 我知道\\1
不是一種subroutine
,那么除了再次重復整個模式之外,JavaScript 中是否還有其他選擇?
我知道一種在RegExp
構造函數中使用variables
的方法。 但是,我的正則表達式是嵌套的,因此排除了一個。
我的問題有點類似於這個問題。 但是,由於以下原因,我的問題有所不同:
我正在嘗試通過將表達式驗證為“平衡括號”來學習正則表達式。
平衡括號是一個表達式,其中每個
(
都用對應的)
例如,以下表達式是有效的:
(1+2)*(2+5)
(1+2(3+4)-6)/(2+4)
((()))
但是, (3+4()
是無效的。
為簡單起見,假設括號內的術語為數字和運算符。
我正在使用 JavaScript 正則表達式。 所以,我嘗試了下面的正則表達式。 但是,它沒有解決。
^(\((?:[^()]|\1*)\)[^()]*)+$
但是,當我嘗試下面的PCRE
正則表達式時,結果很好。
^(\((?:[^()]|(?1))*\)[^()]*)+$
兩個正則表達式的唯一語法差異是如何重新使用第一個捕獲組:JS 中的\\1
和 PCRE 中的(?1)
。 我知道\\1
不是一種subroutine
,那么除了再次重復整個模式之外,JavaScript 中是否還有其他選擇?
我知道一種在RegExp
構造函數中使用variables
的方法。 但是,我的正則表達式是嵌套的,因此排除了一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.