本帖最后由 shubo2000 于 2012-02-21 09:40:58 编辑

解决方案 »

  1.   

    两种思路
    1、使用整体取反
    2、利用环视 /\b(?!sin|cos|tan)([a-z]+)\b/ig 随便写的
      

  2.   

    对js里面的exec,match不了解, 大致可以看懂,主要围绕t1里面的字符串,你要从“1+A-sin(20)-25/cos(25)*tan(19)+B-C”这里面取什么,你说清除点,或许可以帮帮
      

  3.   

    t1=t1.replace(/[\+\-*\/0-9]|(?:sin|cos|tan)\(\d+\)/gi,'');
      

  4.   

    IE6下有点问题,你自己测试一下
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    //去除运算符号,数字,与函数名字,得到变量名及它在原字符串里的位置
    //例如t1字符串,想获得A\B\C三个变量字符及它们所处的位置
    var t1 = "1+A-sin(20)-25/cos(25)*tan(19)+B-C";
    var t2 = "\\d+,\\+,\\-,\\*,\\/,sin,cos,tan";
    var t3 =  new RegExp("[^"+t2+",\\(,\\)]",'g') ;
    var t4=[],t5;
    alert(t1.match(t3));
    while ((t5 = t3.exec(t1))!=null )
    {
        t4.push([t5.index,t5.lastIndex,t5]);
    }
    alert(t4);
    //-->
    </SCRIPT>
      

  5.   

    //去除运算符号,数字,与函数名字,得到变量名及它在原字符串里的位置
    //例如t1字符串,想获得A\B\C三个变量字符及它们所处的位置
    var s    = "1+A-sin(20)-25/cos(25)*tan(19)+B-C";
    var ret  = [];
    var m, r = new RegExp(
         "(\\d+)"            //数字
      + "|([+\\-*/])"          //运算符
      + "|([a-z]+\\(.*?\\))" //函数
      + "|([a-z]+)"          //变量
    , "gi");while( m = r.exec(s) ){
       if(m[1]){
          ret.push('{type : num, name : ' + m[1] + ', posi : ' + r.lastIndex + '}');    
       }   if(m[2]){
          ret.push('{type : optr, name : ' + m[2] + ', posi : ' + r.lastIndex + '}');    
       }
       
       if(m[3]){
          ret.push('{type : func, name : ' + m[3] + ', posi : ' + r.lastIndex + '}');    
       }   if(m[4]){
          ret.push('{type : var, name : ' + m[4] + ', posi : ' + r.lastIndex + '}');
       }
    }
    alert(ret.join('\n'));
      

  6.   

    谢谢大家啊
    最符合的是tzg157
    xingqiliudehuanghun的思路也很独特
    感谢大家了,收分罗