簡體   English   中英

無法在 JavaScript 正則表達式中重用捕獲組的模式

[英]Cannot re-use a pattern of a capturing group inside JavaScript regex

我的問題有點類似於這個問題 但是,由於以下原因,我的問題有所不同:

  • 這個問題沒有以特定的風格提出。
  • 它不包含任何 JavaScript 風格的正則表達式模式,除了驗證兩級嵌套的模式。
  • 它只包含一些我不需要的算法,因為我正在嘗試學習正則表達式。

我正在嘗試通過將表達式驗證為“平衡括號”來學習正則表達式。

平衡括號是一個表達式,其中每個(都用對應的)

例如,以下表達式是有效的:

(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的方法。 但是,我的正則表達式是嵌套的,因此排除了一個。

我的問題有點類似於這個問題 但是,由於以下原因,我的問題有所不同:

  • 這個問題沒有以特定的風格提出。
  • 它不包含任何 JavaScript 風格的正則表達式模式,除了驗證兩級嵌套的模式。
  • 它只包含一些我不需要的算法,因為我正在嘗試學習正則表達式。

我正在嘗試通過將表達式驗證為“平衡括號”來學習正則表達式。

平衡括號是一個表達式,其中每個(都用對應的)

例如,以下表達式是有效的:

(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM