请教个 Sizzle.js 里 rtrim 这个正则。

2015-08-31 20:27:45 +08:00
 9035
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 同一条语句运行结果为:

'\\_'

又是为什么呢?

谢谢谢谢谢谢。

1920 次点击
所在节点    JavaScript
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/217406

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX