whitespace = "[\\x20\\t\\r\\n\\f]"
rtrim = new RegExp ( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" )
//即 /^[\x20\t\r\n\f]+|((?:^|[^\\])(?:\\.)*)[\x20\t\r\n\f]+$/g
用法大概是 str.replace (rtrim,'$1');
作用是去除前后的空白符。
关于这个正则不太理解。搜索了下也没找到答案。 [可能关键词不对。
目前我的理解是分为
^[空白符]+ 部分和 ((?:^|[^\\])(?:\\.)*)[\x20\t\r\n\f]+$
部分。
比如字符串'__v2ex__' //_替代空格了
匹配时
前面两个空格'__'
被^[空白符]+匹配,结束匹配,由于没有分组,这部分被空替换。
由于 g ,继续从 v 开始匹配,至结尾被((?:^|[^\\])(?:\\.)*)[\x20\t\r\n\f]+$
匹配。((?:^|[^\\])(?:\\.)*)
匹配 V2EX [大概。。] ,v2ex 替换原字符串。
得到结果。
但((?:^|[^\\])(?:\\.)*)
这部分实在不能理解。
有人能帮忙解释一下吗? 万分感谢。
另外:
1. 为什么不用str.replace (/(^\s*)|(\s*$)/, "")
这种容易理解的方式? 两者有什么区别?
2.
chrome 控制台运行结果为:
'__\\__'.replace (rtrim,"$1") //_替换空格
"\_"
node 同一条语句运行结果为:
'\\_'
又是为什么呢?
谢谢谢谢谢谢。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.