Подтвердить что ты не робот

JavaScript: Хорошие детали; почему взгляд не хорош?

Я читаю Douglas Crockfords Javascript: The Good Parts, я только что закончил главу регулярных выражений. В этой главе он называет JavaScript \b, положительный lookahead (?=) и отрицательный lookahead (?!) "не является хорошей частью"

Он объясняет причину отсутствия \b (он использует \w для определения границы слова, а \w не подходит для любого языка, который использует символы Юникода), и это выглядит для меня очень веской причиной.

К сожалению, причина положительного и отрицательного взгляда не является хорошей, и я не могу придумать ее. Освоение регулярных выражений показал мне силу, которая приходит с учетом (и, конечно, объясняет проблемы, которые она приносит с собой), но я не могу думать о чем-то, что квалифицировало бы его как "не очень хорошее".

Может ли кто-нибудь объяснить, почему JavaScript (положительный | отрицательный) lookahead или (положительный | отрицательный) lookahead вообще следует считать "нехорошим"?

Кажется, я не единственный, у кого есть этот вопрос: один и два.

4b9b3361

Ответ 1

Может быть, это из-за Internet Explorer вечно багги реализации lookaheads. Для всех, кто создает книгу о JavaScript, любая функция, которая не работает в IE, также не может существовать.

Ответ 2

Единственная причина, по которой я могу думать, может заключаться в том, что они поддерживаются только примерно половиной популярных движков регулярных выражений, хотя, если вы ограничиваете себя синтаксисом, поддерживаемым повсеместно, существует множество вещей, которые вы просто не можете сделать.

Кстати (положительный | отрицательный) (lookahead | lookbehind) иногда коллективно называют "lookaround", как на этой странице, которая сравнивает поддержку признаков между различными реализациями:

http://www.regular-expressions.info/refflavors.html

Ответ 3

Они слишком тяжелы для него?

Или: lookaheads и lookbehind (последние не поддерживаются в JavaScript) значительно увеличивают время регулярного выражения. Но обычно это не регулярное выражение с помощью огромного количества данных в JavaScript. Поэтому они великолепны; используйте их, когда они будут полезны.