正则表达式:只有一个下划线实例
RegEx: Only one instance of underscore
我正在寻找可以接受以下内容的正则表达式模式:
[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
这就是我现在拥有的,但我仍然缺少 只有一个 _
部分。
^{.+_.+}|\[.+_.+]$
我猜 (?!_).+
应该在那里,但我无法将它们拼凑起来。
您可以使用 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'));
我正在寻找可以接受以下内容的正则表达式模式:
[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
这就是我现在拥有的,但我仍然缺少 只有一个 _
部分。
^{.+_.+}|\[.+_.+]$
我猜 (?!_).+
应该在那里,但我无法将它们拼凑起来。
您可以使用 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'));