所以让我说我有这个
example: 1
[
this shouldn't be matched
]
example : 2
[
some bla
[
other bla
]
]
我注意检查文件是否有任何嵌套括号。我不想实际检查括号是否匹配我只需要查看它们是否存在。
现在在我的脑海中这听起来很简单,但我不能从中得到任何东西(就正则表达而言)
所以我想出了一些东西(希望是扫描仪),这只是一个简单的javascrpit功能。
function idNested(str){
// match all brackets
var g = str.match(/[\[\]]/g);
// join them into one string
var b = g.join('');
// match double bracket if there is any , it means that there is nesting :)
return b.match(/\[\[/) ? true : false;
}
第一个正则表达式获取所有括号。然后我将它们连接成一个大字符串并搜索两个相互跟随的括号。
所以我的问题实际上是基于两件事。
1 - 是否有正则表达式可以解决我的问题?!
2-这个功能有什么缺点吗?若是,那么请提出其他建议。
答案 0 :(得分:2)
为什么不检查一下:
\[ # Match an open bracket
[^\]]*? # Match zero or more non-closing bracket ] lazily
\[ # Match another opening bracket
[^\]]* # Match zero or more non-closing bracket ] greedily
\] # Match a closing bracket.
就像这样,如果我们匹配一个空心括号[
,那么我们会寻找另一个开括号[
,我们确保不会越过右括号{{1 }}
如果上面的表达式匹配,则文本中有嵌套。
]
注意:这假定文件中不包含不正确的嵌套括号。
答案 1 :(得分:2)
回答2:
不,如果你的方括号正确嵌套,这不应该有任何垮台。
基本上,您将字符串缩减为仅括号。在您的情况下,字符串将变为[][[]]
。
假设我们一次处理字符串2个字符。只有4种可能的组合:
[[
我们找到了一个嵌套的括号,我们完成了匹配,因为字符串的其余部分必须有这些括号(例如[[]]
)。[]
我们找到了一组括号,忽略了这个结果,继续前进。][
这种情况永远不会发生,因为它暗示我们已经匹配 1 (例如[[][...
)并且我们已完成算法,或者您的括号嵌套无效(例如[]][
)。]]
如果括号拼写正确,我们就会找到 1 ,因此永远不会达到此状态。因此你的算法会起作用。
回答1号:
话虽如此,使用单个正则表达式(假设适当的嵌套),代码会更简单:
str.match(/\[[^\]]*\[/)
匹配的字符串:
[[]]
[[[]]]
[][[]]
不匹配的字符串:
[][]
[]
我们不关心的字符串(因为它们没有正确嵌套):
[[
][[
[[[]]