Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匹配两个开括号_Javascript_Regex - Fatal编程技术网

Javascript 匹配两个开括号

Javascript 匹配两个开括号,javascript,regex,Javascript,Regex,假设我有这个 example: 1 [ this shouldn't be matched ] example : 2 [ some bla [ other bla ] ] 我观察文件是否有嵌套的括号。我不想实际检查括号是否匹配,我只需要看看它们是否存在 在我看来,这听起来很简单,但我无法从中得到任何东西(就正则表达式而言) 所以我想出了一个简单的javascrpit函数(希望是一个扫描器) function idNested(str){ //

假设我有这个

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-此功能是否有任何缺陷?如果是这样,那么请提出其他建议

为什么不检查一下:

\[              # 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.
它的工作原理是这样的,如果我们匹配了一个开括号
[
,那么我们会寻找另一个开括号
[
,并确保我们不会穿过一个闭括号
]

如果上述表达式匹配,则文本中存在嵌套

var isNested = '[f daflkd [hfds ] fdaf d[ [] fd'.match(/\[[^\]]*?\[[^\]]*\]/g);
注意:这假定文件不包含不适当的嵌套括号


为什么不检查一下:

\[              # 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.
它的工作原理是这样的,如果我们匹配了一个开括号
[
,那么我们会寻找另一个开括号
[
,并确保我们不会穿过一个闭括号
]

如果上述表达式匹配,则文本中存在嵌套

var isNested = '[f daflkd [hfds ] fdaf d[ [] fd'.match(/\[[^\]]*?\[[^\]]*\]/g);
注意:这假定文件不包含不适当的嵌套括号


答录号码2:

不,如果括号嵌套正确,则不会有任何问题

从本质上讲,您将字符串缩减为只有括号的字符串。在您的情况下,字符串将变成
[[]]

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

  • [[
    我们找到了一个嵌套的括号,我们完成了匹配,因为字符串的其余部分必须有这些括号(例如
    [[]]
  • []
    我们找到了一组括号,忽略此结果,然后继续
  • ][
    这永远不会发生,因为这意味着我们要么已经匹配了1(例如,
    [[[][…
    )并且我们已经完成了算法,要么您有无效的括号嵌套(例如,
    [][
  • ]
    如果括号嵌套正确,我们可能已经找到1,因此永远不会达到这种状态
  • 因此,您的算法将起作用

    回答号码1:

    话虽如此,使用一个正则表达式(假设嵌套正确),代码会简单得多:

    要匹配的字符串:

    • [[]]
    • [[]]
    • [[]]
    不匹配的字符串:

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

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

      • 答录号码2:

        不,如果括号嵌套正确,则不会有任何问题

        从本质上讲,您将字符串缩减为只有括号的字符串。在您的情况下,字符串将变成
        [[]]

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

      • [[
        我们找到了一个嵌套的括号,我们完成了匹配,因为字符串的其余部分必须有这些括号(例如
        [[]]
      • []
        我们找到了一组括号,忽略此结果,然后继续
      • ][
        这永远不会发生,因为这意味着我们要么已经匹配了1(例如,
        [[[][…
        )并且我们已经完成了算法,要么您有无效的括号嵌套(例如,
        [][
      • ]
        如果括号嵌套正确,我们可能已经找到1,因此永远不会达到这种状态
      • 因此,您的算法将起作用

        回答号码1:

        话虽如此,使用一个正则表达式(假设嵌套正确),代码会简单得多:

        要匹配的字符串:

        • [[]]
        • [[]]
        • [[]]
        不匹配的字符串:

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

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

        这是我的/\[^\]*?\[/gIt没有意义,因为如果你不想匹配括号,你就看不到它们是否存在。否则,它们的随机存在可能是
        ^(?=.\[.[.\[)(?=..\].\])
        我本来想回答的,但@dandavis已经提供了解决方案(在第一个括号关闭之前找到第二个打开的括号)这是我的/\[^\]*?\[/gIt没有意义,因为如果你不想匹配括号,你就看不到它们是否存在。否则,它们的随机存在可能是
        (?=.\[.[.].\[)(?=.[.].\].\])
        我本来想回答的,但是@dandavis已经提供了解决方案(在第一个括号关闭之前找到第二个打开的括号)不是真的,
        [[
        不是嵌套的括号。@sln谢谢你指出这一点,你能对更新后的解决方案发表意见吗。我认为你的思路是对的,也许唯一能知道的方法就是拿到两套
        \[.\[.\[.\].\].\]
        @sln谢谢。我想你是对的,不过我现在就不做了。不太好,
        [[
        不是嵌套的括号。@sln谢谢你指出这一点,你能对更新后的解决方案发表意见吗?我想你说得对