2

我正在尝试将字符串拆分为“。” 除非字符串的一部分在 [ ] 中,否则我只想返回括号内的内容。

我有以下代码行:

"blah.blah[http://blah.blah.com/blah/blah#]".split(("(\\.|\\[(?=.*\\]))")

这将返回:

 [ "blah", "blah", "http:blah", "blah", "com/blah/blah#]" ]

如果相反,我尝试:

"blah.blah[http://blah.blah.com/blah/blah#]".split(("(\\.|\\[(?:.*\\]))")

我得到:

["blah", "blah"]

我不确定我需要如何定义我的非捕获组,以便它会在第一个 [ 但在直到并包括 ] 之后不捕获任何内容

只是为了澄清我期待回来的数组是

["blah", "blah", "http://blah.blah.com/blah/blah#"]
4

1 回答 1

2

为此,最好的选择是使用“查找”方法而不是使用以下模式拆分:

(?<=\\[)[^\\]]*(?=\\])|[^\\][.]+

请注意,备选方案的顺序很重要,因为第一个获胜。所以(?<=\\[)[^\\]]*(?=\\])必须在之前[^\\][.]+

演示

于 2014-12-11T19:02:36.750 回答