我正在尝试匹配这种字符串模式,其中包含由一对冒号包围的单词(每行都是一个单独的字符串(:
:foo::bar:
:foo:
:foo: :bar::test:
:foo: :bar: :test:
但我希望正则表达式在以下类型的模式上失败:
:foo:something:bar:
:foo:something
some :bar:
:foo: some:bar: thing
:foo: some :bar: thing
(注意,单词之间可能有0个或更多的空格(
我尝试使用这个正则表达式:
re = /^(:.*?: ?)+$/gm
但它在第二组示例中失败了(因为它匹配(。当冒号包围的单词之间或之前/之后有单词时,有没有办法以某种方式使正则表达式失败?
如果只有一个或多个单词字符w+
,则可以在左右两侧的:
之间重复匹配单词。
请注意,.
也可以与您尝试的模式中的:
相匹配。
^:w+:(?: *:w+:)*$
Regex演示
如果您不想匹配: : : :
^(?:: *[^:s]*[^:]*: *)+$
^
字符串开始(?:
非捕获组: *[^:s]*
匹配:
可选空格,:
以外的非空白字符[^:]*: *
然后可选地匹配除:
之外的任何字符,然后匹配:
)+
关闭非捕获组并重复1次以上$
字符串末尾
Regex演示