当然,这个查找替换功能可以选择不选中正则表达式。
两个关键函数(写了三小时才测试成功),要来得瑟一下!勾选中了“正则?”之后,可以实现跨行搜索内容。
function find(isdesc){
var startPos=Editor.selectionStart,endPos=Editor.selectionEnd;
var isreg=document.se.isreg.checked;
var str=document.se.find.value;
if(str=='')return false;
var tmpStr=Editor.value,len=str.length,ss=-1;
if(tmpStr=='')return false;
//console.log(startPos+','+endPos+','+tmpStr.length);
if(!isdesc){
if(startPos==tmpStr.length)startPos=Editor.selectionStart=endPos=Editor.selectionEnd=0;
if(isreg){
var reg=new RegExp(str,"im");
tmpStr=tmpStr.substr(endPos);
var arr=tmpStr.match(reg);
if(arr){str=arr[0];len=str.length;ss=tmpStr.indexOf(str)+endPos;}
}
else{
ss=tmpStr.indexOf(str,endPos);
}
if(ss>-1){Editor.selectionStart=ss;Editor.selectionEnd=ss+len;}else {alert('已搜到底部');Editor.selectionStart=Editor.selectionEnd=0;}
}
else{
if(endPos==0)startPos=Editor.selectionStart=endPos=Editor.selectionEnd=tmpStr.length;
if(isreg){
var reg=new RegExp(str,"img");
tmpStr=tmpStr.substring(0,startPos);
var arr=tmpStr.match(reg);
if(arr){
str=arr[arr.length-1];
len=str.length;
ss=tmpStr.lastIndexOf(str);
}
}
else{
ss=tmpStr.lastIndexOf(str,startPos-len);
}
if(ss>-1){Editor.selectionStart=ss;Editor.selectionEnd=ss+len;}else{alert('已搜到顶部');Editor.selectionStart=Editor.selectionEnd=tmpStr.length;}
}
}
function replace(isall){
var str=document.se.find.value,str2=document.se.for.value;
var isreg=document.se.isreg.checked;
if(str=='')return false;
var tmpStr=Editor.value,len=str.length,ss=-1;
if(tmpStr=='')return false;
if(isall){
var pattern=str;
if(!isreg)pattern=str.replace(/([\/\|\.\\\(\)\*\?\^\$])/g,'\\$1');
Editor.value=tmpStr.replace(new RegExp(pattern,"igm"),str2);
// i:不区分大小写,g:全局搜索,m:多行搜索
Editor.selectionStart=Editor.selectionEnd=0;
}
else{
var startPos=Editor.selectionStart,endPos=Editor.selectionEnd;
if(isreg){
var reg=new RegExp(str,"im");
tmpStr=tmpStr.substr(startPos);
var arr=tmpStr.match(reg);
if(arr){str=arr[0];len=str.length;ss=tmpStr.indexOf(str)+startPos;str2=str.replace(reg,str2);}
}
else ss=tmpStr.indexOf(str,startPos);
if(ss>-1){
tmpStr=Editor.value;
Editor.value=tmpStr.substring(0,ss)+str2+tmpStr.substr(ss+str.length);
Editor.selectionStart=ss;Editor.selectionEnd=ss+str2.length;}else {alert('已搜到底部');Editor.selectionStart=Editor.selectionEnd=0;
}
}
}
现在我正在翻译SVG2.0的w3c草案。