gpt4 book ai didi

javascript - 正则表达式,贪婪直到第二场比赛

转载 作者:行者123 更新时间:2023-11-30 10:27:55 25 4
gpt4 key购买 nike

我正在尝试这样的事情

^(.*)[\s]*(?:\[[\s]*(.*)[\s]*\])?$

我的想法是第一个匹配返回所有内容,但偶尔的第二个匹配返回 [] 内的任何内容。要匹配的传入字符串已被 trim 。

例如

'aaaaa [] [ddd]' -> returns 'aaaa []' plus 'ddd'
'[] [ddd]' -> returns '[]' plus 'ddd'
'aaaaaaaa' -> returns 'aaaaaaa' plus NULL
'aaaaaaaa []' -> returns 'aaaaaaa' plus ''
'aaaaaa [' -> returns 'aaaaaa [' plus NULL
'aaaa [] ddd' -> returns 'aaaa [] ddd' plus NULL
'[a] [b] [c] [d]' returns '[a] [b] [c]' plus 'd' instead of '' plus 'a] [b] [c] [d'
'[fff]' -> return '' plus 'fff' <- That's particular since first match can never be null

我的主要问题是第一场比赛,因为 .* (吞下所有)和 *? (只吞到第一个 ] 如果多个)给出一个不希望的结果

算法的伪代码是这样的:

  • 如果最后一个字符是 ']',则第二个匹配项将是直到closest '[' backwards (if exist) -> 这可以是 null 或 '' 如果输入字符串以“[]”结尾
  • rest为第一个匹配,不能为NULL,只''

有什么建议吗?

最佳答案

如果没有嵌套,你可以使用这个正则表达式:

^(.*?)\s*(?:\[([^\]]*)\])?$

regex101 demo

否则,如果您可以在主 [] 中嵌套 [],则必须修改正则表达式。您可以为嵌套的 [] 创建正则表达式,但只能达到一定的嵌套级别;如果最多有 2 层嵌套,则为 2 创建一个正则表达式,如果最多有 5 层嵌套,则为 5 创建一个更复杂的正则表达式,等等。

关于javascript - 正则表达式,贪婪直到第二场比赛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18716664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com