假设我有这个
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:
不,如果您的括号嵌套正确,这应该不会有任何问题。
本质上,您是将字符串缩减为仅包含括号。在您的情况下,字符串将变为 [][[]]
。
假设我们一次处理字符串 2 个字符。只有 4 种可能的组合:
[[
我们找到了一个嵌套的括号,我们完成了匹配,因为字符串的其余部分必须有右括号(例如[[]]
).[]
我们找到了一组括号,忽略此结果并继续。][
这永远不会发生,因为这意味着我们要么已经匹配了 1(例如[[][...
)我们完成了算法,或者您有无效的括号嵌套(例如[]][
)。]]
如果方括号嵌套正确,我们就已经找到了 1,因此永远不会达到这个状态。
这样你的算法就可以工作了。
答案1:
话虽如此,使用单个正则表达式(假设正确嵌套)的代码会简单得多:
str.match(/\[[^\]]*\[/)
要匹配的字符串:
[[]]
[[[]]]
[][[]]
无法匹配的字符串:
[][]
[]
我们不关心的字符串(因为它们没有正确嵌套):
[[
][[
[[[]]
关于javascript - 匹配两个左括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169312/