解决方案 »
- 在Javascript中对样式的修改何时生效?
- 请教如何分别获取日期参数(年,月,日)JS代码
- 小问题,谢谢大家了。
- <input type=text>有没有OnLostFocus()事件啊?
- 一个困扰的问题(类似像阿里巴巴那样启动"贸易通")
- 正则表达式问题
- JavaScript FileSystemObject 是否可以保存文件成UTF-8编码?
- 如何用javascript做一个投票程序
- IE数据保密大全,如何禁止以下功能?菜单,工具栏,收藏夹,鼠标右键,PRINTSCREEN键,键盘快捷键
- ueditor怎么修改成上传图片分类
- 呼叫大虾,九宫锁屏问题
- jquery.easyui.min.js 展现树的bug,高手进来看看。
var reg=/([a-z]+)|([0-9]+)|([A-Z]+)/g;
var tests="abbc0123AZ0";
var t=tests.match(reg);
for(var i=0;i<t.length;i++){
var reg=/([a-z]+)|([0-9]+)|([A-Z]+)/g;
reg.test(t[i]);
alert(RegExp.$1+":"+RegExp.$2+":"+RegExp.$3);
if(RegExp.$1){
t[i]=1;
}else if(RegExp.$2){
t[i]=2;
}else if(RegExp.$3){
t[i]=3;
}
}
alert(t.join(""));
</script>
感觉只能逐个匹配啊 等高手吧
<script language="JavaScript">
var regarr=[/a/g,/b/g,/c/g,/d/g];
var str="absdbuiqiownaasdssdn";
for(var i=0;i<regarr.length;i++){
str=str.replace(regarr[i],i+1);
}
alert(str);
</script>
这个问题已经有答案了。现在的难处在于,类似2楼这样的,不确定的字符串,如何做:
var reg=/([a-z]+)|([0-9]+)|([A-Z]+)/g;确定匹配字符串的例子:
var reg = /tom|jerry|kate/g;
var map = {
'tom': 'abcd',
'jerry': '1234',
'kate': 'csdn'
};var text = "tom and jerry and kate".replace(reg, function(s){
return map[s];
});alert(text);
var s='abcsds3sdf223 23 a 2d 4 d 5s 7dsa';
alert(s.replace(/([a-z])/g,function(s,s1,i){return s1.charCodeAt(0)-96+''}));
...
}或 Matcher m = pattern.matcher("string");
while (m.find()) {
...
}(JavaScript 类似的方法)这样在 while 里面包括每次匹配的部分,这个部分可以用查找表之类替换: while .. {
item = map.get(item);
}最后,把“未匹配到的部分“连起来: replacement = "";
offset = 0;
while .. {
replacement += s.substring(offset, matchBegin);
replacement += map.get(item);
offset = matchEnd;
} replacement += s.substring(matchBegin);
// sa='1', sb='2', sc='3', sd='1a' 假定对应要替换的字符串为这些
//生成一个Map,以正则表达式的源文本为key,对应的字符串为value。获取一个正则表达式的源文本用reg.source方法获取。
var regMap={
'a':'1',
'b':'2',
'c':'3',
'1':'1a'
},regs=[],tmp=false;//regs是最终正则表达式
regs.push('(');
for(var p in regMap){
if(regMap.hasOwnProperty(p)){
if(tmp)regs.push('|');
regs.push(p);
tmp=true
}
}
regs.push(')');
regs=new RegExp(regs.join(''),'g');var s='abc1xdsk a o c d 1 z';
alert(s.replace(regs,function(s,s1){return regMap[s1]}))以上代码要求所有正则表达式的匹配模式一致,要么都为'g',要么都为'gi',或者都为'i'
对于这样不确定匹配文本的正则呢?/([a-z]+)|([0-9]+)|([A-Z]+)/g;有没好的办法?
即便是固定的字符串 类似于
var reg = /tom|jerry|kate/g;
var map = {
'tom': 'abcd',
'jerry': '1234',
'kate': 'csdn'
};var text = "tom and jerry and kate".replace(reg, function(s){
return map[s];
});alert(text);
他也是逐个匹配的 这个可以看下正则的匹配方式
对比下,发现 ff, chrome, opera,都是一次性效率较高,
效率相差近一倍。
IE则正好相反。万恶的IE.var map = {
'tom0': 'abcd',
'jerry0': '1234',
'kate0': 'csdn',
'tom1': 'abcd',
'jerry1': '1234',
'kate1': 'csdn',
'tom2': 'abcd',
'jerry2': '1234',
'kate2': 'csdn',
'tom3': 'abcd',
'jerry3': '1234',
'kate3': 'csdn',
'tom4': 'abcd',
'jerry4': '1234',
'kate4': 'csdn',
'tom5': 'abcd',
'jerry5': '1234',
'kate5': 'csdn',
'tom6': 'abcd',
'jerry6': '1234',
'kate6': 'csdn',
'tom7': 'abcd',
'jerry7': '1234',
'kate7': 'csdn'
};var d = new Date();
var s = '';
for(var i = 0; i < 100000; ++i){
var text = "tom0 and jerry1 and kate2 tom1 and jerry2 and kate0 tom2 and jerry0 and kate1 tom3 and jerry3 and kate3";
s = s.substr(0,1) +
text.replace(/tom0|jerry0|kate0|tom1|jerry1|kate1|tom2|jerry2|kate2|tom3|jerry3|kate3|tom4|jerry4|kate4|tom5|jerry5|kate5|tom6|jerry6|kate6|tom7|jerry7|kate7/g, function(k){
return map[k];
});
}
alert(new Date() - d + '\n'+s);
var d = new Date();
var s = '';
for(var i = 0; i < 100000; ++i){
var text = "tom0 and jerry1 and kate2 tom1 and jerry2 and kate0 tom2 and jerry0 and kate1 tom3 and jerry3 and kate3";
s = s.substr(0,1) +
text.replace(/tom0/g, "abcd")
.replace(/jerry0/g, "1234")
.replace(/kate0/g, "csdn")
.replace(/tom1/g, "abcd")
.replace(/jerry1/g, "1234")
.replace(/kate1/g, "csdn")
.replace(/tom2/g, "abcd")
.replace(/jerry2/g, "1234")
.replace(/kate2/g, "csdn")
.replace(/tom3/g, "abcd")
.replace(/jerry3/g, "1234")
.replace(/kate3/g, "csdn")
.replace(/tom4/g, "abcd")
.replace(/jerry4/g, "1234")
.replace(/kate4/g, "csdn")
.replace(/tom5/g, "abcd")
.replace(/jerry5/g, "1234")
.replace(/kate5/g, "csdn")
.replace(/tom6/g, "abcd")
.replace(/jerry6/g, "1234")
.replace(/kate6/g, "csdn")
.replace(/tom7/g, "abcd")
.replace(/jerry7/g, "1234")
.replace(/kate7/g, "csdn")
}
alert(new Date() - d + '\n'+s);