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,因此永远不会达到这种状态[[]]
[[]]
[[]]
[][]
[]
[[
][[
[[]]
- 答录号码2:
不,如果括号嵌套正确,则不会有任何问题
从本质上讲,您将字符串缩减为只有括号的字符串。在您的情况下,字符串将变成
[[]]
假设我们一次处理字符串2个字符。只有4种可能的组合:
[[
我们找到了一个嵌套的括号,我们完成了匹配,因为字符串的其余部分必须有这些括号(例如[[]]
)[]
我们找到了一组括号,忽略此结果,然后继续][
这永远不会发生,因为这意味着我们要么已经匹配了1(例如,[[[][…
)并且我们已经完成了算法,要么您有无效的括号嵌套(例如,[][
)]
如果括号嵌套正确,我们可能已经找到1,因此永远不会达到这种状态[[]]
[[]]
[[]]
[][]
[]
[[
][[
[[]]
^(?=.\[.[.\[)(?=..\].\])
我本来想回答的,但@dandavis已经提供了解决方案(在第一个括号关闭之前找到第二个打开的括号)这是我的/\[^\]*?\[/gIt没有意义,因为如果你不想匹配括号,你就看不到它们是否存在。否则,它们的随机存在可能是(?=.\[.[.].\[)(?=.[.].\].\])
我本来想回答的,但是@dandavis已经提供了解决方案(在第一个括号关闭之前找到第二个打开的括号)不是真的,[[
不是嵌套的括号。@sln谢谢你指出这一点,你能对更新后的解决方案发表意见吗。我认为你的思路是对的,也许唯一能知道的方法就是拿到两套\[.\[.\[.\].\].\]
@sln谢谢。我想你是对的,不过我现在就不做了。不太好,[[
不是嵌套的括号。@sln谢谢你指出这一点,你能对更新后的解决方案发表意见吗?我想你说得对