Проблема регулярных выражений javascript - PullRequest
2 голосов
/ 11 марта 2010

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

var x = 0;

function doMath(myVar){

RE = //; // here is the problem 
if(RE.test(myVar))
  eval(x+myVar)
else
return false;

}

Я хочу, чтобы RE совпадало с любым математическим уравнением, которое может быть добавлено к этому числу, например

EXAMPLE 
+10+20+30 //accepted
**10 //rejected
-10- // rejected
10 // rejected
%10 //accepted
*(10+10)-10 //accepted

, пожалуйста, помогите мне

}

Ответы [ 2 ]

1 голос
/ 11 марта 2010

Как насчет того, чтобы просто выполнить тест на допустимые символы (чтобы предотвратить некоторые внедрения кода), а затем попробовать "eval" -ing it?

function doMath(myVar){
    if (/^[0-9()%*\/+-]+$/.test(myVar)){
        try{
             return eval(myVar);
        }catch(e){}
    }
    return false;
}
0 голосов
/ 11 марта 2010

Как уже упоминалось в комментариях, арифметические уравнения не являются регулярными, поэтому не обрабатывайте их с помощью регулярных выражений.

Напишите контекстно-свободную грамматику для арифметических выражений и используйте генератор синтаксических анализаторов, такой как Jison , который генерирует анализатор в javascript из вашей заданной грамматики.

Пример CFG для математических выражений

На странице Jison прокрутите вниз до раздела «Указание языка» . В этом разделе дается грамматика языка для разбора арифметических выражений. Надеюсь, это поможет.

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