【问题标题】:RegEx: Only one instance of underscore正则表达式:只有一个下划线实例
【发布时间】:2018-04-14 19:42:10
【问题描述】:

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

[foo_bar]{foo_bar}

地点:

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

    示例匹配:

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

    样本不匹配:

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

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

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

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

  • 【问题讨论】:

    标签: javascript java regex regex-group


    【解决方案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'));

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多