正则表达式:只有一个下划线实例

RegEx: Only one instance of underscore

我正在寻找可以接受以下内容的正则表达式模式:

[foo_bar]{foo_bar}

其中:

  • [ ]{ } 作为包装器
  • foobar 可以是 任何东西 除了 _ 重复 1 到 n 次
  • _ 应该只出现一次并且应该在 foobar

    之间

    匹配示例:

  • [1Ab_23c]
  • {abcDefGhjk_Z}
  • {1_abcDefGhjk}

    样本不匹配:

  • {1Ab_23c]
  • {_1Abde_fg4567_2_}
  • {1Abde_fg4567_2}
  • 1Ab_23c

    这就是我现在拥有的,但我仍然缺少 只有一个 _ 部分。

    ^{.+_.+}|\[.+_.+]$
    

    我猜 (?!_).+ 应该在那里,但我无法将它们拼凑起来。

  • 您可以使用 complemented character set - [^_](除下划线外):

    const pattern = /\[[^_]+_[^_]+\]|\{[^_]+_[^_]+\}/;
    
    // matches
    console.log(pattern.test('[1Ab_23c]'));
    console.log(pattern.test('{1Abdefg4567_2}'));
    console.log(pattern.test('{1Ab_23c}'));
    
    // mismatches
    console.log(pattern.test('{1Ab_23c]'));
    console.log(pattern.test('{_1Abde_fg4567_2_}'));
    console.log(pattern.test('{1Abde_fg4567_2}'));
    console.log(pattern.test('1Ab_23c'));