Будут ли условия ORed или ANDed вместе?
Starts with: abc
Ends with: xyz
Contains: 123
Doesn't contain: 456
Версия OR довольно проста; как вы сказали, это в основном вопрос вставки труб между отдельными условиями. Регулярное выражение просто прекращает поиск совпадения, как только совпадает одна из альтернатив.
/^abc|xyz$|123|^(?:(?!456).)*$/
Эта четвертая альтернатива может выглядеть странно, но именно так вы выражаетесь "не содержится" в регулярном выражении. Кстати, порядок альтернатив не имеет значения; это фактически то же регулярное выражение:
/xyz$|^(?:(?!456).)*$|123|^abc/
Версия AND более сложная. После каждого отдельного регулярного выражения позиция соответствия должна быть сброшена на ноль, чтобы следующий регулярный оператор имел доступ ко всему входу. Это означает, что все условия должны быть выражены в виде предварительных заявлений (технически одно из них не должно быть предварительным просмотром, я думаю, что таким образом оно выражает намерение более четко). Финал .*$
завершает матч.
/^(?=^abc)(?=.*xyz$)(?=.*123)(?=^(?:(?!456).)*$).*$/
И затем есть возможность комбинировать условия И и ИЛИ - вот где начинается настоящее веселье. : D