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>
//去除运算符号,数字,与函数名字,得到变量名及它在原字符串里的位置 //例如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 + '}'); }
1、使用整体取反
2、利用环视 /\b(?!sin|cos|tan)([a-z]+)\b/ig 随便写的
<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>
//例如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'));
最符合的是tzg157
xingqiliudehuanghun的思路也很独特
感谢大家了,收分罗