簡體   English   中英

用於解析正則表達式字符串的正則表達式

[英]A regex to parse regex string

我需要用正則表達式解析一個正則表達式。 我有一個正則表達式字符串:

[a-z]{1}[-][0-9]{4}[-][ab]

解析上面我想出的字符串的實際正則表達式幾乎可以工作是:

/(?|\[(.*?)\]\{(.*?)\}|\[(.*?)\](.*?))/g

在這個 regex101示例中可以看到它的作用,這里的錯誤出現在Match 2及其第 1 組-][0-9 ,應該只是- )中。


目標是匹配方括號[]內的所有內容,后跟大括號{}內的數字。 如果方括號[]之后的大括號{}丟失,則應使用null填充它,這就是替代組對分支重置組所做的事情。 此外,如果只是方括號后跟一個方括號,那么它預計也會在以后起作用(匹配方括號[]內部的內容並用null填充第 2 組)。

我的正則表達式不會在第三個[-]上停止並將其匹配到-][0-9而不是僅匹配-然后從解析[0-9]{4}開始的問題。

預期的匹配應該是:

[a-z]{1}
a-z
1

[-]
-
null

[0-9]{4}
0-9
4

[-]
-
null

[ab]
ab
null

當前匹配不正確,如下:

[a-z]{1}
a-z
1

[-][0-9]{4}
-][0-9
4

[-]
-
null

[ab]
ab
null

我錯過了什么?

這個正則表達式應該工作:

\[([^]]*)](\{\d+\}|)

演示

解釋:

  • \[ - 匹配[
  • ([^]]*) - 匹配任何不是]的字符的 0+ 次出現,並在組 1 中捕獲此子匹配
  • ] - 匹配]
  • (\{\d+\}|) - 不匹配任何內容或{后跟 1+ 位數字后跟} 任何匹配的都存儲在第 2 組中

如果您在 JS 中編寫這些,則應刪除正則表達式中的第一項( /(\[(.*?)\]\{(.*?)\}|\[(.*?)\](.*?))/g )

如果您想檢查 JS 和 PHP 之間的區別( Php 是 regex101 中的默認值), 此鏈接可能會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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