我需要一个正则表达式,它将捕获(文字)AA和(文字)BB之间的任意内容,并且限制它只匹配最接近BB的AA。
例如,给定:
AA stuff1 BB
它会捕获“stuff1
”,但是会给出
AA stuff1 AA stuff2 BB
它会捕获“stuff2
”而不是“stuff1 AA stuff2
”。
在真棒online regex tester的帮助下,我想出了以下内容:
/AA((?:.(?!AA))+)BB/
它使用否定前瞻来排除以AA结尾的任何匹配。这有效 - 我对此很好 - 但是有更好的方法吗?
AA和BB是(可能)包含空格的标记,例如“截止日期”和“账单日期”。所以\ w和它的朋友们不会在这里帮忙。
'stuff'可能跨越多行。
源字符串中只有一个BB实例。
我在javascript工作,但我不想使用任何特定语言的RegEx怪癖。当然,你需要[^]匹配javascript中的'包括换行符的任何字符',这是允许的。
我在'stuff1
'等处添加空格以表明是的,它应该捕获空格。
答案 0 :(得分:2)
我认为你不需要在这里使用前瞻 - 对于以下两个测试用例,这是good enough:
/.*AA(.*?)BB/
AA stuff1 AA stuff2 BB blabla # matches ` stuff2 `
AA stuff3 AA stAAuff4 BB # matches `uff4 `
答案 1 :(得分:0)
您的解决方案非常合理。另一种方式是
/AA[^A](?:[^A]|.[^A])*BB/
请注意,我添加了第一个[^A]
,以便AAAxBB
能够获得AAxBB
的匹配而不是整个字符串(因为这实际上是AA
的更接近两个)。
答案 2 :(得分:0)