Javascript 如何编写识别不平衡括号的函数

Javascript 如何编写识别不平衡括号的函数,javascript,function,Javascript,Function,我试图编写一个函数来检查语法是否正确。如果正确,则返回“ok”,否则返回错误索引。到目前为止,如果代码是正确的,如果错误在第一个索引或最后一个索引中,我的代码就可以工作。发现两者之间的错误是我感到困难的。这是我的密码 function syntaxError(syntax) { let arr = syntax.split('').join() let arr1 = []; let arr2 = []; let result; //Error if the first i

我试图编写一个函数来检查语法是否正确。如果正确,则返回“ok”,否则返回错误索引。到目前为止,如果代码是正确的,如果错误在第一个索引或最后一个索引中,我的代码就可以工作。发现两者之间的错误是我感到困难的。这是我的密码

function syntaxError(syntax) {

  let arr = syntax.split('').join()
  let arr1 = [];
  let arr2 = [];
  let result;

  //Error if the first index contain a closing braces

  if (arr[0] === '>' || arr[0] === ']' || arr[0] === '}' || arr[0] === ')') {
    result = 0
  };

  if (arr === "") {
    result = 'ok'
  };

  //Error if its just a single brace

  if (arr.length === 1) {
    result = 0
  };

  //Error if the last index contain an opening braces

  if (arr.slice(-1) === '<' || arr.slice(-1) === '[' || arr.slice(-1) === '{' || arr.slice(-1) === '(') {
    result = indexOf(arr.slice(-1))
  };

  let char = arr[i];

  if (char == '[' || char == '{' || char == '<' || char == '(') {
    arr1.push(char)
  } else {
    arr2.push(char);
  }

  if (arr1.length === 0 || arr2.length === 0) {
    result = 0
  }

  if (arr1.length === arr2.length) {
    result = 'ok'

  }

  return result
}
函数语法错误(语法){
设arr=syntax.split(“”).join()
设arr1=[];
设arr2=[];
让结果;
//如果第一个索引包含右大括号,则出错
如果(arr[0]=='>'| | arr[0]==']']'| | arr[0]=='}'| | arr[0]=='')){
结果=0
};
如果(arr==“”){
结果='确定'
};
//如果只是一个大括号,则会出错
如果(arr.length==1){
结果=0
};
//如果最后一个索引包含大括号开头,则出错
如果(arr.slice(-1)='')

您可以使用数组作为每个开头字符的索引,如果找到了相关的结尾字符,则可以将其弹出

如果已完成且堆栈没有项,则语法正常,否则返回索引或上一次推送的开始字符的索引

例如:

code        comment
----------- ---------------------------
[][[[]][][]
[]          balanced
  [         error, this returns later 2
   [[]]     balanced
       []   balanced
         [] balanced
            finally a missing ]
函数语法错误(语法){
常数
等间距=c=>/[/[>\]}]/.测试(c),

open={'>':'执行此操作的算法是,找到一个打开符号,将其推送到堆栈(或数组,无论什么)。找到另一个开始符号,将其推到堆栈中。找到与堆栈顶部匹配的结束符号,将开始符号从堆栈中弹出。找到与堆栈顶部不匹配的结束符号,则发现错误。找到结束符号,则堆栈中没有任何内容,则发现错误。走到最后,仍然在堆栈上保留符号堆栈,您发现了一个错误。

您的意思是,您的函数应该检查是否有平衡括号?是的,如果有错误,它应该返回错误的索引位置。您应该使用某种数据结构,如堆栈。事实上,您可以像堆栈一样使用常用数组。这个问题称为平衡括号问题返回索引可能会导致错误在上一个链接中,我为您制作了一个片段。请修复控制台错误。那么,错误的确切位置是什么,例如在
[[]]<或代码>应该是0还是5?好答案,但是Op已经表示他们想要的是没有闭合符号的开头符号的索引。他们认为最里面的开头符号需要匹配最外面的一个,因为某种原因。我的算法没有解决这个行为。问题是,开放的括号是ALW。是的,只有在缺少结束括号时才会抛出错误。我完全同意,但op有其他想法:)顺便说一句,我发现在堆栈中使用un(shift)比使用push/pop更实用,这样你就可以使用
堆栈[0]
而不是丑陋的
堆栈[stack.length-1]
code        comment
----------- ---------------------------
[][[[]][][]
[]          balanced
  [         error, this returns later 2
   [[]]     balanced
       []   balanced
         [] balanced
            finally a missing ]