Ответ 1
Может быть, это из-за Internet Explorer вечно багги реализации lookaheads. Для всех, кто создает книгу о JavaScript, любая функция, которая не работает в IE, также не может существовать.
Я читаю Douglas Crockfords Javascript: The Good Parts, я только что закончил главу регулярных выражений. В этой главе он называет JavaScript \b
, положительный lookahead (?=)
и отрицательный lookahead (?!)
"не является хорошей частью"
Он объясняет причину отсутствия \b
(он использует \w
для определения границы слова, а \w
не подходит для любого языка, который использует символы Юникода), и это выглядит для меня очень веской причиной.
К сожалению, причина положительного и отрицательного взгляда не является хорошей, и я не могу придумать ее. Освоение регулярных выражений показал мне силу, которая приходит с учетом (и, конечно, объясняет проблемы, которые она приносит с собой), но я не могу думать о чем-то, что квалифицировало бы его как "не очень хорошее".
Может ли кто-нибудь объяснить, почему JavaScript (положительный | отрицательный) lookahead или (положительный | отрицательный) lookahead вообще следует считать "нехорошим"?
Кажется, я не единственный, у кого есть этот вопрос: один и два.
Может быть, это из-за Internet Explorer вечно багги реализации lookaheads. Для всех, кто создает книгу о JavaScript, любая функция, которая не работает в IE, также не может существовать.
Единственная причина, по которой я могу думать, может заключаться в том, что они поддерживаются только примерно половиной популярных движков регулярных выражений, хотя, если вы ограничиваете себя синтаксисом, поддерживаемым повсеместно, существует множество вещей, которые вы просто не можете сделать.
Кстати (положительный | отрицательный) (lookahead | lookbehind) иногда коллективно называют "lookaround", как на этой странице, которая сравнивает поддержку признаков между различными реализациями:
Они слишком тяжелы для него?
Или: lookaheads и lookbehind (последние не поддерживаются в JavaScript) значительно увеличивают время регулярного выражения. Но обычно это не регулярное выражение с помощью огромного количества данных в JavaScript. Поэтому они великолепны; используйте их, когда они будут полезны.