Мне нужно регулярное выражение, которое запрещает двойное подчеркивание в слове, но с одним исключением: если оно находится в конце и за ним следует x - тогда строка действительна. Порядок символов не играет роли. Например:
Foo_bar__x = VALID
Foo__bar_x = INVALID
Строка может содержать более одного символа подчеркивания и буквенно-цифровых символов. Вот регулярное выражение, которое почти соответствует моим требованиям, оно делает "__" запрещенным, но оно не обрабатывает случай с завершением __x:
^(?!.*__.*)\w+$
Вы можете использовать это регулярное выражение с отрицательным видом:
/^(?!.*__(?!x$))\w+$/
(?!.*__(?!x))
является отрицательным взглядом, который утверждает отказ, когда мы получаем __
, за которым следует любой символ, отличный от x
в конце ввода.
Вложенный отрицательный lookahead (?!x$)
для утверждения двойных подчеркиваний не сопровождается x
до конца, чтобы получить успешное совпадение.