【问题标题】:RegEx: Only one instance of underscore正则表达式:只有一个下划线实例
【发布时间】:2018-04-14 19:42:10
【问题描述】:
我正在寻找可以接受以下内容的正则表达式模式:
[foo_bar] 或 {foo_bar}
地点:
[ ] 或 { } 充当包装器
foo 和 bar 可以是任何东西,除了 _ 重复 1 到 n 次
_ 应该只出现一次并且应该在foo 和bar 之间
示例匹配:
[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'));