У меня есть регулярное выражение: /^(\s*\(*\s*[0-9]*\s*[+\-*/]?\s*[0-9]*\s*\)*\s*)*$/
оно не идеально, но оно разработано для быстрой проверки того, что вводимая строка является математической формулой c, например, 7 * 9 * (6 + 5)
. Я делаю вторичные проверки, если это проходит, чтобы найти незамкнутые скобки (формула также может заканчиваться оператором).
Javascript String.prototype.match
может использовать регулярное выражение для очень быстрого сопоставления с некоторыми строками, например, "7 * 912 + 6 + 7 +".match(regex)
, но очень медленно с другими:
-
"7 * 912 + 6 + $ +".match(regex)
"7 * 912 + 6 + ^ +".match(regex)
"7 * 912 + 6 + [ +".match(regex)
"7 * 912 + 6 + ] +".match(regex)
Однако это быстро для: "7 * 912 + $ +".match(regex)
Предположительно, причина этого в том, что строка содержит специальные символы в сочетании с? в середине (проблема исчезнет, если я уберу это) - но только когда объединено определенное количество операторов? Есть ли способ улучшить производительность этого? Прямо сейчас я просто проверяю любые специальные символы (так как ни один не разрешен), но я бы хотел что-нибудь почище.