Во-первых, вместо использования отрицательного класса в положительном Lookahead / Lookbehind, вы могли бы вместо этого использовать отрицательные Lookaheads / Lookbehinds (если только вы не хотите убедиться, что дефису предшествует и что-то следует за ним). Теперь ваш шаблон означает:
Соответствует дефису, которому не предшествуют [a-z]
и , за которым не следует [a-z]
.
В то время как вы, похоже, ищете:
Подберите дефис, которому не предшествует [a-z]
, а затем [a-z]
одновременно.
В этом случае вы можете использовать следующее:
(?<![a-z])-|-(?![a-z])
Демо .
Или если вы хотите сохранить положительные Lookarounds с отрицательными классами:
(?<=[^a-z])-|-(?=[^a-z])
Примечание: Вы упомянули, что хотите проверить оба значения a-z
и A-Z
, но в своем примере вы использовали только a-z
, Чтобы проверить и то, и другое, вы можете заменить [a-z]
на [a-zA-Z]
, как показано выше.