RegEx:只有一个下划线实例

时间:2018-04-14 19:42:10

标签: javascript java regex regex-group

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

[foo_bar]{foo_bar}

其中:

  • [ ]{ }充当包装
  • foobar可以任何,但_重复1到n次
  • _应该只出现一次,应该在foobar之间

    示例匹配:

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

    样本不匹配:

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

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

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

    我猜测(?!_).+应该以某种方式存在但我无法将它们拼凑在一起。

  • 1 个答案:

    答案 0 :(得分:1)

    您可以使用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'));