То, чего вы не хотите, близко или, возможно, невозможно - я не проанализировал грамматику, чтобы точно знать, какая именно.
Сначала взглянем на грамматику ECMAScript для идентификаторов. Вы можете увидеть его на сайте ANTLR . Прокрутите вниз, где он определяет идентификаторы:
identifierName:
// snip full comment
identifierStart (identifierPart)*
;
identifierStart:
unicodeLetter
| DOLLAR
| UNDERSCORE
| unicodeEscapeSequence
;
Грамматика использует EBNF, поэтому вам нужно следовать этим двум нетерминалам: identifierStart
и identifierPart
. Основная проблема, с которой вы столкнетесь, заключается в том, что вам нужно учитывать большую часть юникода и его escape-символов.
Например, с identifierStart
мы видим, что регулярное выражение должно позволять использовать букву, знак доллара, подчеркивание или escape-последовательность Unicode в качестве первого «символа».
Таким образом, вы можете начать свое регулярное выражение:
"[$_a-zA-Z]..."
Конечно, вам нужно изменить a-zA-Z
для поддержки всего Unicode, а затем увеличить выражение для поддержки последовательности Eicode Escape, но, надеюсь, это даст вам старт процессу.
Конечно, если вам нужно только приблизительное приближение, многие другие ответы предоставляют грубое регулярное выражение, которое обрабатывает небольшое подмножество того, что фактически разрешено.