代码之家  ›  专栏  ›  技术社区  ›  iamkenos

RegEx:只有一个下划线实例

  •  0
  • iamkenos  · 技术社区  · 6 年前

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

    [foo_bar] {foo_bar}

    其中:

  • 任何一个 [ ] { } 充当包装器
  • foo bar 可以是 任何东西 除了 _ 在1到n次之间重复
  • _ 应该只出现一次,并且应该介于 foo公司 酒吧

    示例匹配:

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

    样本不匹配:

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

    这就是我现在拥有的,但我仍然错过了 只有一个 _ 部分

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

    我猜 (?!_).+ 应该在那里,但我不能把它们拼凑在一起。

  • 1 回复  |  直到 6 年前
        1
  •  1
  •   Ori Drori    6 年前

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