簡體   English   中英

正則表達式對字符串中的遞歸模式進行分組並將捕獲組作為數組返回

[英]Regex to group recursive pattern in string and return capture group as array

我有一個看起來像這樣的字符串: Hello:A1,A3,A4,AA04

現在我有一個看起來像這樣的正則表達式查詢:

/(?<g1>[A-Za-z]+):(?<g2>[A-Za-z0-9,]+)/

找到匹配項后,我可以像這樣訪問它:

"Hello:A1,A3,A4,AA04".match(/(?<g1>[A-Za-z]+):(?<g2>[A-Za-z0-9,]+)/).groups.g1 // outputs: Hello

好的...現在我也有g2 我需要一個數組中的g2,消失了。 現在在我的代碼中,我已經這樣做了:

"Hello:A1,A3,A4,AA04".match(/(?<g1>[A-Za-z]+):(?<g2>[A-Za-z0-9,]+)/).groups.g2.split(',') // outputs: [ 'A1', 'A3', 'A4', 'AA04' ]

現在的問題是:是否可以在沒有.split(',')的情況下通過使用 Regex 來完成此操作並使其返回如下:

"Hello:A1,A3,A4,AA04".match(?).groups.g2 // would output: [ 'A1', 'A3', 'A4', 'AA04' ]

我知道我不是最擅長解釋這一點,但我試圖找到答案,我要么錯過它,要么不可能。 這不是關鍵或超級重要的,只是我的想法。 對不起這個可怕的標題。

運行 Node.js v13.2.0

添加了 ^ 以僅匹配字符串的開頭。 使用前瞻。
請注意,前瞻沒有很好的瀏覽器支持。
另外,我不知道/沒有測試過這個與 exec 循環的性能特征。 老實說,它看起來並不比拆分更干凈。 如果你想要一個單線,我想這就足夠了。
我記得在其他使用 RegEx 的平台上很長的字符串表現不佳。 但我最終還是求助於其他方法進行搜索。

 console.log( "Hello:A1,A3,A4,AA04".match(/(^[A-Za-z]+(?=:))|((?=,?)([A-Za-z0-9]+))/g) )

暫無
暫無

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

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