You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

需求:匹配无括号或平衡括号的正则表达式(修正返回逻辑)

解决无括号或平衡括号的字符串校验问题

要满足「无任何括号」或「包含平衡括号」的校验需求,可以使用支持递归的正则表达式(ES2018及以上版本JavaScript支持),同时覆盖两种场景:

const reg = /^(?:[^()]|\((?:[^()]|(?R))*\))*$/;

正则说明

  • ^ 和 $:锁定整个字符串的首尾,避免只匹配部分内容
  • (?:[^()]|\((?:[^()]|(?R))*\))*:重复匹配以下两种内容任意次数:
    • [^()]:任意非括号字符
    • \((?:[^()]|(?R))*\):平衡的括号结构,其中(?R)递归调用整个正则,支持嵌套括号(比如(a(b)c)这类场景)

修正后的测试代码

function func(str) {
  const reg = /^(?:[^()]|\((?:[^()]|(?R))*\))*$/;
  console.log(`测试字符串: "${str}"`);
  console.log(`校验结果: ${reg.test(str)}`);
  console.log(`匹配内容: ${str.match(reg) ? str.match(reg)[0] : '无匹配'}`);
  console.log('---');
}

func("33");          // 无括号 → 返回true
func("1(1)6");       // 平衡括号 → 返回true
func("11)6");        // 不平衡括号 → 返回false
func("(a(b)c)");     // 嵌套平衡括号 → 返回true
func("((a)");        // 多余左括号 → 返回false
func("a)b(c)");      // 多余右括号 → 返回false

测试结果说明

  • "33":无任何括号,校验通过
  • "1(1)6":括号成对出现,校验通过
  • "11)6":存在单独的右括号,校验失败
  • "((a)":左括号未闭合,校验失败
  • "a)b(c)":右括号无对应左括号,校验失败

内容的提问来源于stack exchange,提问作者Maan Ch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:45:20