Как я могу найти имена методов javascript в файле? - PullRequest
1 голос
/ 04 октября 2010

Может ли кто-нибудь помочь мне найти имена методов с помощью регулярных выражений в файлах JavaScript.

1 Ответ

2 голосов
/ 04 октября 2010
(?!function\s+)([_$a-zA-Z][_$a-zA-Z0-9]*)(?=\s*\()

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

WhiteSpace
LineTerminator
Comment

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

WhiteSpace:
    '\u0009'
    '\u000c'
    '\u00a0'
    '\u180e'
    '\u2001'
    '\u2003'
    '\u2005'
    '\u2007'
    '\u2009'
    '\u202f'
    '\u3000'
    '\u000b'
    '\u0020'
    '\u1680'
    '\u2000'
    '\u2002'
    '\u2004'
    '\u2006'
    '\u2008'
    '\u200a'
    '\u205f'
    '\ufeff'

Сразу же сложность нашего регулярного выражения возросла.Теперь у нас есть производство LineTerminator, которое опять-таки не так просто, как вы думаете.

LineTerminator:
    '\u000a'
    '\u000d'
    '\u2028'
    '\u2029'

Я не буду вдаваться в подробности, но приведу несколько примеров совершенно правильных определений функций.

function
a() {

}

function /*Why is this comment here!!!*/ a() {

}

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

Примечание

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

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