正则表达式 替换字符串 [javascript]

需求:将”冰\\雨三刘德\\\"华-----\\12雨3\\\\\\\\\\222222“中的"\\"替换成||,而且是只替换\\,不能替换多于两个\的字符,比如,样例中,应该只替换冰雨中间的\\和--12中间的\\。

正则表达式是我的老朋友了,喜欢上它大概是07年的时候处理一个发布系统标签读取的项目,好长时间没用了,有点生疏了。遇到字符串处理的问题,我第一想到的肯定是正则表达式,eclipse里也常备一款Regular的插件,简单思考后就有了:

直接往javascript里搬吧,发现javascript不支持(?<!)的写法,也就是不支持”反向否定预查“,只能用其他方式了,于是有了:

	function change(newStr){
		//var reg = /(?<!\\)\\\\(?!\\)/g;
		var reg = /[^\\](\\{2})(?!\\)/g;
		//var str_before = '冰\\雨三刘德\\\"华-----\\12雨3\\\\\\\\\\222222';
		var str_before = '冰\\\\雨三刘德\\\\\\"华-----\\\\12雨3\\\\\\\\\\\\\\\\\\\\222222';
		var str_after = str_before.replace(reg,newStr);
		alert(str_after);
	}

这样写,不仅会将符合条件的\\捕获到,也会将前边的一个字符捕获到,脑子有点不灵光,想了半天,没想出好的方法,最后逆向思维了一下,把那个字符提取出来和要替换的字符合并不就成了吗?于是有了:

	function change(newStr){
		//var reg = /(?<!\\)\\\\(?!\\)/g;
		var reg = /[^\\](\\{2})(?!\\)/g;
		//var str_before = '冰\\雨三刘德\\\"华-----\\12雨3\\\\\\\\\\222222';
		var str_before = '冰\\\\雨三刘德\\\\\\"华-----\\\\12雨3\\\\\\\\\\\\\\\\\\\\222222';
		var str_after = str_before.replace(reg,function(m){
			m = m.substring(0,1);
			return m + newStr;
		});
		alert(str_after);
	}
基本满足需求。

相关文章

jquery.validate使用攻略(表单校验) 目录 jquery.validate...
/\s+/g和/\s/g的区别 正则表达式/\s+/g...
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母...
this.optional(element)的用法 this.optional(element)是jqu...
jQuery.validate 表单动态验证 实际上jQuery.validate提供了...
自定义验证之这能输入数字(包括小数 负数 ) &lt;script ...