如何在测试用例示例中检查javascript中的表达式是否正确?

如何在测试用例示例中检查javascript中的表达式是否正确?,javascript,Javascript,我有以下测试用例,在这些测试用例中,我需要用javascript对正确的表达式进行分类 (a) correct ((a)) correct (a(b)) correct (b) correct (b incorrect 你可以看到最后一个是不正确的表达。我们如何通过javascript实现这一点呢?这是一个略加编辑的答案 这是一个略加修改的答案 您需要使用一个简单的堆栈来存储左括号。以下是一个简短的解释: 将字符串转换为字符数组 创建一个空堆栈 迭代每个字符: 如果字符不是圆括号

我有以下测试用例,在这些测试用例中,我需要用javascript对正确的表达式进行分类


(a) correct

((a)) correct

(a(b)) correct

(b) correct

(b  incorrect

你可以看到最后一个是不正确的表达。我们如何通过javascript实现这一点呢?

这是一个略加编辑的答案


这是一个略加修改的答案


您需要使用一个简单的
堆栈
来存储左括号。以下是一个简短的解释:

  • 将字符串转换为字符数组
  • 创建一个空堆栈
  • 迭代每个字符:
    • 如果字符不是圆括号,请继续下一次迭代
    • 如果是左括号,则将其存储在堆栈中
    • 如果是右括号,则有两种可能性:
      • 如果堆栈中没有对应的左括号,则该字符串无效
      • 如果有,则弹出相应的对括号并正常继续
  • t1='(a)'、t2='((b))、t3='(a(b))、t4='(b');
    常量isValid=(str)=>{
    让字符=str.split(“”);
    让堆栈=[];
    for(设i=0;iconsole.log(isValid(t4));
    您需要使用一个简单的
    堆栈来存储左括号。下面是一个简要说明:

  • 将字符串转换为字符数组
  • 创建一个空堆栈
  • 迭代每个字符:
    • 如果字符不是圆括号,请继续下一次迭代
    • 如果是左括号,则将其存储在堆栈中
    • 如果是右括号,则有两种可能性:
      • 如果堆栈中没有对应的左括号,则该字符串无效
      • 如果有,则弹出相应的对括号并正常继续
  • t1='(a)'、t2='((b))、t3='(a(b))、t4='(b');
    常量isValid=(str)=>{
    让字符=str.split(“”);
    让堆栈=[];
    for(设i=0;iconsole.log(isValid(t4));
    如果他们想检查字符串,那么我只需在字符串上循环。我会有一个变量(
    characterCount
    ),它为每个“(“character”和每个“)添加一个。如果最终结果为0,则格式正确

    编辑:我还需要检查
    characterCount
    是否为负数,这意味着格式不正确


    如果是面试,请他们澄清。提问的程序员比假设的程序员更有价值(并且花费数小时的宝贵时间编写错误的功能)

    函数检查格式(str){
    const END\u CHARACTER\u BEFORE\u START\u CHARACTER=CORRECT\u FORMATTING=0;
    让characterCount=正确的\u格式;
    让startCharacter='(';
    让endCharacter=');
    for(设i=0;icheckFormatting(')a(“);//false
    如果他们想检查字符串,那么我只需在字符串上循环。我会有一个变量(
    characterCount
    ),它为每个“('character')添加一个,并为每个“')减去一个。如果最终结果为0,则格式正确

    编辑:我还需要检查
    characterCount
    是否为负数,这意味着格式不正确


    如果是面试,请他们澄清。提问的程序员比假设的程序员更有价值(并且花费数小时的宝贵时间编写错误的功能)

    函数检查格式(str){
    const END\u CHARACTER\u BEFORE\u START\u CHARACTER=CORRECT\u FORMATTING=0;
    让characterCount=正确的\u格式;
    让startCharacter='(';
    让endCharacter=');
    for(设i=0;icheckFormatting(')a((');//false
    处理其他类型的方括号-{}、[]和()

    <
    function check(expr){
        const holder = []
        const openBrackets = ['(']
        const closedBrackets = [')']
        for (let letter of expr) { // loop trought all letters of expr
            if(openBrackets.includes(letter)){ // if its oppening bracket
                holder.push(letter)
            }else if(closedBrackets.includes(letter)){ // if its closing
                const openPair = openBrackets[closedBrackets.indexOf(letter)] // find his pair
                if(holder[holder.length - 1] === openPair){ // check if that pair is last element in array
                    holder.splice(-1,1) //if so, remove it
                }else{ // if its not
                    holder.push(letter)
                    break // exit loop
                }
            }
        }
        if(holder.length === 0)
        {
          console.log("correct");
        }
        else{
          console.log("incorrect");
        }
    }
    check('(a)') /// give the string you want to check here