您的位置:首页 > Web前端 > JavaScript

实践中Javascript使用RegExp.$1导致trim()自定义函数的一个Bug

2010-03-30 11:43 543 查看
今天帮助同事排除一个页面的问题,碰到一个常用公共自定义函数trim(去掉前后空白字符)

function trim(str) { 
	var re = //s*(/S[^/0]*/S)/s*/; 
	re.exec(str); 
	return RegExp.$1; 
}
alert(trim("1234 "));
alert(trim(""));
/*
推荐的方法
function trim(str) { 
	return str.replace(/^/s+|/s+$/, ""); 
}
*/




发现如果参数是空字符串,输出的结果是前一个测试的字符串 o(╯□╰)o



简化一些测试代码:

/(/d+)/.exec("12345");
alert(RegExp.$1);
/(/d+)/.exec("abcde");
alert(RegExp.$1);




结果很清楚了,如果正则不匹配字符串,不会改变RegExp对象的分组属性



function trim(str) { 
	var re = //s*(/S[^/0]*/S)/s*/; 
	if (!re.exec(str)) return str; 
	return RegExp.$1; 
}



解决方案是加一个判断。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐