You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用正则表达式匹配中间为and、cat和dog位置可互换的三个词

解决精准匹配"cat"、"and"、"dog"且"and"居中的正则问题

我懂你要的是严格让"cat"和"dog"分别在"and"两侧,顺序可以互换的场景,你之前的正向环视只保证了两个词都存在,但没约束它们和"and"的位置关联对吧?

直接给你能满足需求的正则表达式:

^(?:\bcat\b\s+\band\b\s+\bdog\b|\bdog\b\s+\band\b\s+\bcat\b)$

拆解一下这个正则的逻辑:

  • ^$ 锚点确保匹配整个字符串(如果是在长文本里找片段,可以去掉这两个锚点)
  • (?:A|B) 是一个非捕获组,用来覆盖两种合法的顺序:
    • \bcat\b\s+\band\b\s+\bdog\b:匹配 "cat" 在前,后跟任意数量空白字符,接着是"and",再跟任意空白字符,最后是"dog"
    • \bdog\b\s+\band\b\s+\bcat\b:匹配 "dog" 在前,中间是"and",最后是"cat"
  • \b 是单词边界,避免误匹配像"catty"或者"doggy"这类包含目标词的其他单词
  • \s+ 匹配一个或多个空白字符(如果允许零空白,比如"catanddog",可以改成\s*

如果需要允许三个词之间有非空白的分隔符(比如标点),可以把\s+改成\W+,这样就能匹配像"cat, and dog"或者"dog - and - cat"这类场景,调整后的正则:

^(?:\bcat\b\W+\band\b\W+\bdog\b|\bdog\b\W+\band\b\W+\bcat\b)$

内容的提问来源于stack exchange,提问作者Eradicator_1729

火山引擎 最新活动