今天帮助同事排除一个页面的问题,碰到一个常用公共自定义函数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; }
解决方案是加一个判断。
本文探讨了一个自定义trim函数中的正则表达式陷阱,并提供了解决方案。当参数为空字符串时,该函数返回的是前一个测试的字符串而非预期的空字符串。文章通过增加一个判断来解决这一问题。
505

被折叠的 条评论
为什么被折叠?



