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

Что неправильно с обозначением регулярного выражения JavaScript?

Я читал веб-страницу Дугласа Крокфорда, JavaScript: мир, который был самым непонятным языком программирования, и я не мог не заметить, что под Ошибки проектирования, он упоминает "обозначение для буквальных регулярных выражений". О чем именно он говорит? Что с ошибкой JavaScript для регулярных выражений и почему?

4b9b3361

Ответ 1

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

/test// является недопустимым, а /test\// является допустимым регулярным выражением.

В то время как на некоторых языках вы можете указать символ денота в строке, например:

$regex = '#test/#';

Если символы # обозначают символ.

Ответ 2

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

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

Но это просто догадка. Я понятия не имею, что имел в виду Крокфорд с его выражением.

Лично я считаю, что литералы регулярных выражений весьма полезны. Они намного менее подробные, чем альтернатива new RegExp(pattern, flags) с его необходимостью придерживаться как выравнивания регулярных выражений, так и правил экранирования строки ("Path\\\\with\\\\backslashes", кто-нибудь?). Я не вижу огромной выгоды для этой нотации, кроме как для работы с динамическими регулярными выражениями.

Ответ 3

Он действительно не очень ясно понимает, что он означает, что вставка с запятой является ошибкой. Возможно, он означает точки с запятой как разделители высказываний. Если это так, я не согласен. Без переопределений кода с запятой / minifiers не запускаются на вашем коде.

Ответ 4

Возможно, испорчено косой чертой, используемой для комментариев и делением на this, или потому что "они должны быть одной строкой без пробелов или комментариями, вставленными в это" per this.