javascript - 正则表达式缺少括号

标签 javascript regex parentheses

我认为 Regex 不能用于检测缺少的括号(因为无法计算对数)的想法是否正确?使用 JavaScript 我有大约一千个字符串已被 chop 并需要手动编辑。我希望能够使用代码将此列表缩小到需要注意的列表。字符串可以被认为是以下形式:

  • (这个可以,不需要注意)
  • 这也[好]
  • 这很糟糕(需要编辑
  • 这[(也)不好
  • 这是}不好
  • 这个字符串没有任何类型的括号,但也必须考虑

如果这不可能,那么我只需要编写一个函数来查找括号对。谢谢

最佳答案

function isFine(str) {  
  return /[(){}\[\]]/.test( str ) && 
    ( str.match( /\(/g ) || '' ).length == ( str.match( /\)/g ) || '' ).length &&
    ( str.match( /\[/g ) || '' ).length == ( str.match( /]/g ) || '' ).length &&
    ( str.match( /{/g ) || '' ).length == ( str.match( /}/g ) || '' ).length;
}

测试

isFine('(this is fine and does not need attention)');                 // true
isFine('This is also [fine]');                                        // true
isFine('This is bad( and needs to be edited');                        // false
isFine('This [is (also) bad');                                        // false
isFine('as is this} bad');                                            // false
isFine('this string has no brackets but must also be considered');    // false

但请注意,这不会检查括号顺序,即 a)b(c 将被视为正常。

作为记录,这里有一个函数可以检查缺少的括号并检查每种类型是否正确平衡。它不允许 a)b(c,但允许 (a[bc)d],因为每种类型都单独检查。

function checkBrackets( str ) {
    var lb, rb, li, ri,
        i = 0,
        brkts = [ '(', ')', '{', '}', '[', ']' ];   
    while ( lb = brkts[ i++ ], rb = brkts[ i++ ] ) { 
        li = ri = 0;
        while ( li = str.indexOf( lb, li ) + 1 ) {
            if ( ( ri = str.indexOf( rb, ri ) + 1 ) < li ) {
                return false;
            }
        }
        if ( str.indexOf( rb, ri ) + 1 ) {
            return false;
        } 
    }
    return true;
}

最后,在 Christophe 的帖子之后,这里似乎是检查缺少括号并检查所有括号是否正确平衡和嵌套的最佳解决方案:

function checkBrackets( str ) {
    var s;
    str = str.replace( /[^{}[\]()]/g, '' );
    while ( s != str ) { 
        s = str;
        str = str.replace( /{}|\[]|\(\)/g, '' )
    }
    return !str;
};

checkBrackets( 'ab)cd(efg' );        // false   
checkBrackets( '((a)[{{b}}]c)' );    // true   
checkBrackets( 'ab[cd]efg' );        // true   
checkBrackets( 'a(b[c)d]e' );        // false   

关于javascript - 正则表达式缺少括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14334740/

相关文章:

javascript - 使用 SSN 正则表达式、屏蔽输入和依赖的 Jquery 验证

regex - Hadoop Hive SerDe Row Format for String Quoted Space delimited file

javascript - 带有最小括号的 pretty-print AST

javascript - 限制对页面的访问,除非来自特定页面

javascript - console.log 参数但已定义

javascript - d3.js - 返回不存在元素的selectAll的目的是什么

javascript - 在 Node.js 中导入钩子(Hook)

java - 我应该使用什么样的正则表达式?

c++ - 括号中的变量 C++

Windows批处理括号范围