正则表达式的多重条件

时间:2017-08-25 08:26:10

标签: regex

我最近开始使用正则表达式,但我似乎无法弄清楚这个问题:

https://xxxx.yyyy.com/en

对于此URL,我想创建一个仅在以下所有条件都为真时才有效的正则表达式:

  • 不包含' xxxx'
  • 包含/ en $或/ en /

我必须验证两个单独的条件,但似乎无法将它们组合在一起

\/en\/|\/en$|^(?!.*(xxxx)).*$

你能帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用

/^(?!.*xxxx).*\/en(?:$|\/)/

请参阅regex demo

<强>详情

  • ^ - 字符串开头
  • (?!.*xxxx) - 除了换行符之外的任何0 +字符之后不能xxxx
  • .* - 除了换行符之外的任何0个或更多个字符,尽可能多
  • \/en - /en substring
  • (?:$|\/) - 字符串结尾或/

因此,如果您想用多个术语替换xxxx,请使用

/^(?!.*(?:stage|acc)).*\/en(?:$|\/)/

请注意,如果添加单词边界,您可以强制引擎将它们作为整个单词匹配:

/^(?!.*\b(?:stage|acc)\b).*\/en(?:$|\/)/

如果您需要完整的字符串匹配,请在模式的末尾添加.*

答案 1 :(得分:0)

仅使用外观:

^(?!.*xxxx)(?=.*\/en(?:$|\/)).*

^             // start of line
(?!.*xxxx)    // look ahead and don't match anything then 'xxxx'
(?=           // look ahead and match
.*\/en        // anything then '/en'
(?:$|\/)      // end of line OR a slash
)             // end of look ahead
.*            // match all (can be omitted if testing lines)
  • 标志:全球,多线
  • 步骤:188
  • Demo