V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
9035
V2EX  ›  JavaScript

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

  •  
  •   9035 · 2015-08-31 20:27:45 +08:00 · 1923 次点击
    这是一个创建于 3379 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 同一条语句运行结果为:

    '\\_'

    又是为什么呢?

    谢谢谢谢谢谢。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   924 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:55 · PVG 04:55 · LAX 12:55 · JFK 15:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.