今天帮助同事排除一个页面的问题,碰到一个常用公共自定义函数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; }
解决方案是加一个判断。