Есть вот такая регулярка: "/\s*(?\d+)|(\w+)|(.))/gim"
Она все определяет прекрасно за исключением того, что такие числа как "3.2" или операторы "==", "++", "<=" она парсит как
"3",".","2"
"=","="
"<","="
Лексемы языка JavaScript =)
Сейчас она парсит все на блоки, но к сожалению если длина лексемы больше 1 символа, то она делит её на несколько(к названиям переменных не относится)