【发布时间】:2019-12-06 09:45:05
【问题描述】:
我正在尝试创建一个仅在字符串包含某些模式的实例时才匹配的正则表达式。假设我只需要一个由空格分隔的“foo”或“bar”子字符串组成的字符串。
因此,有效实例是:“foo”、“bar”、“foo foo”、“foo bar”、“foo foo bar”、“foo bar foo bar”... 无效实例:“foofoo bar”、“baz foo bar”、“foo bar baz”
因此,foo 或 bar 的每个实例(即我的基本模式或捕获组)应该以空格开头或在字符串的开头,并且应该以空格结尾或位于字符串的结尾。
这似乎是一个简单的任务,但我想不通。
这是我目前得到的:
(?:^|bar\s|foo\s)(foo|bar)(?=$|\sbar|\sfoo)
它在“foofoo bar”上不起作用(不知何故它是有效的)。
我正在用 Python 测试它。但如果它也能在 JS 中工作就更好了。
【问题讨论】:
-
你似乎想匹配空格分隔的模式,
^(?:foo|bar)(?: (?:foo|bar))*$ -
Wiktor Stribiżew,谢谢,这很有效。我可以做任何事情来指定我的模式一次吗?我想使用复杂的模式。可以在这里应用命名组和 \g
吗? -
在下面查看我的答案。
标签: regex