匹配两个左括号

时间:2013-10-03 21:11:03

标签: javascript regex

所以让我说我有这个

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-这个功能有什么缺点吗?若是,那么请提出其他建议。

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 }}

如果上面的表达式匹配,则文本中有嵌套。

]

注意:这假定文件中不包含不正确的嵌套括号。

Regex101 Demo

答案 1 :(得分:2)

回答2:

不,如果你的方括号正确嵌套,这不应该有任何垮台。

基本上,您将字符串缩减为仅括号。在您的情况下,字符串将变为[][[]]

假设我们一次处理字符串2个字符。只有4种可能的组合:

  1. [[我们找到了一个嵌套的括号,我们完成了匹配,因为字符串的其余部分必须有这些括号(例如[[]])。
  2. []我们找到了一组括号,忽略了这个结果,继续前进。
  3. ][这种情况永远不会发生,因为它暗示我们已经匹配 1 (例如[[][...)并且我们已完成算法,或者您的括号嵌套无效(例如[]][)。
  4. ]]如果括号拼写正确,我们就会找到 1 ,因此永远不会达到此状态。
  5. 因此你的算法会起作用。

    回答1号:

    话虽如此,使用单个正则表达式(假设适当的嵌套),代码会更简单:

    str.match(/\[[^\]]*\[/)
    

    匹配的字符串:

    • [[]]
    • [[[]]]
    • [][[]]

    不匹配的字符串:

    • [][]
    • []

    我们不关心的字符串(因为它们没有正确嵌套):

    • [[
    • ][[
    • [[[]]