V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
9035

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

  •  
  •   9035 · Aug 31, 2015 · 2257 views
    This topic created in 3905 days ago, the information mentioned may be changed or developed.
    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 同一条语句运行结果为:

    '\\_'

    又是为什么呢?

    谢谢谢谢谢谢。

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4987 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 09:50 · PVG 17:50 · LAX 02:50 · JFK 05:50
    ♥ Do have faith in what you're doing.