Что не так с регулярными выражениями JavaScript? - PullRequest
11 голосов
/ 20 июня 2010

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

Ответы [ 4 ]

9 голосов
/ 20 июня 2010

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

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

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

$regex = '#test/#';

Где # символы делают обличение.

1 голос
/ 02 января 2011

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

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

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

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

0 голосов
/ 25 декабря 2014

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

0 голосов
/ 02 января 2011

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

...