我正在寻找一个接受以下内容的正则表达式模式:
[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
这就是我现在所拥有的,但我仍然缺少只有一个 _
部分。
^{.+_.+}|\[.+_.+]$
我猜测(?!_).+
应该以某种方式存在但我无法将它们拼凑在一起。
答案 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'));