Используйте токенизатор и позвольте ему разбить строки до осмысленной структуры.
Библиотека почти. js - популярный выбор для синтаксического анализа нелинейных структур, подобных вашей. Вы можете сохранить свои выражения простыми - или, если выберете иное, библиотека может создать абстрактное синтаксическое дерево для сложного гриммера.
Чтобы написать синтаксический анализатор с использованием библиотеки, определите свой словарь в отдельном файле и используйте это для синтаксического анализа.
Или вы можете напрямую использовать токанизатор, чтобы токанизировать вашу строку.
@{%
const moo = require("moo");
const lexer = moo.compile({
ws: /[ \t]+/,
number: /[0-9]+/,
word: /[a-z]+/,
times: /\*|x/
});
%}
# Pass your lexer object using the @lexer option:
@lexer lexer
# Use %token to match any token of that type instead of "token":
multiplication -> %number %ws %times %ws %number {% ([first, , , , second]) => first * second %}
# Literal strings now match tokens with that text:
trig -> "sin" %number