javascript - 匹配两个左括号

标签 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:

不,如果您的括号嵌套正确,这应该不会有任何问题。

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

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

  1. [[ 我们找到了一个嵌套的括号,我们完成了匹配,因为字符串的其余部分必须有右括号(例如 [[]] ).
  2. [] 我们找到了一组括号,忽略此结果并继续。
  3. ][ 这永远不会发生,因为这意味着我们要么已经匹配了 1(例如 [[][...)我们完成了算法,或者您有无效的括号嵌套(例如 []][)。
  4. ]] 如果方括号嵌套正确,我们就已经找到了 1,因此永远不会达到这个状态。

这样你的算法就可以工作了。

答案1:

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

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

要匹配的字符串:

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

无法匹配的字符串:

  • [][]
  • []

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

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

关于javascript - 匹配两个左括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169312/

相关文章:

javascript - 如何处理 Javascript 异步

javascript - 为什么 onbeforeunload 事件没有触发

python - 在大括号内按保留空格的字符串拆分

JavaScript 正则表达式 : Get string between a match and another char

javascript - jqueryUI Datepicker 加上 dd/mm/yyyy 格式的验证器

php - 从 mysql 插入语句中删除链接?

javascript - json 对象中的换行符

javascript - 如何从cordova-plugin-audioinput获取音频流以进行实时可视化

javascript - "myVar.constructor"和 "typeof myVar"有什么区别?

JavaScript 正则表达式检查搜索的字符串前面是否没有任何内容或空格