Показать сообщение отдельно
  #6 (permalink)  
Старый 24.02.2013, 16:17
Интересующийся
Отправить личное сообщение для zm_sansan Посмотреть профиль Найти все сообщения от zm_sansan
 
Регистрация: 26.05.2012
Сообщений: 26

Решил задачу таким скриптом
alert(prRazd("5*3.48*(-1)*a*(b*(3+9*u))*ololo*0.5",'*'));
function prRazd(obj,c){ //парсит по знаку c, перепрыгивая скобки(т.к. в них тоже может быть этот знак)
    arr = [];
    for(var i=0, p=i;i<=obj.length;){
        if(i==obj.length || obj.charAt(i)==c){ //если c
            arr.push(obj.substr(p,i-p));
            i++;
            p=i;
        }
        else{
            if(obj.charAt(i)=='(') i=parSk(obj,i)+1; //если выражение в скобках
            else{ //если число или имя переменной
                if(obj.indexOf(c,i)==-1) i = obj.length;
                else i = obj.indexOf(c,i);
            }
        }
    }
    return arr;
}
 
function parSk(s,i) { //находит парную скобку, будет работать при условии, что скобки стоят правильно
    var k1=0, k2=0, k;
    switch(s.charAt(i)){
        case '(':
            k1++;
            k=1;
        break;
        case ')':
            k2++;
            k=-1;
        break;
    }
    
    do{
        i+=k;
        switch(s.charAt(i)){
            case '(': k1++; break;
            case ')': k2++; break;
        }
    }while(k1!=k2)
    return i;
}

Последний раз редактировалось zm_sansan, 24.02.2013 в 16:29.
Ответить с цитированием