Neverending Puppy Marathon

    sscan

    0.2.0 • Public • Published

    sscan

    NPM version GitHub version Build Status Dependency Status Code Climate Coverage Status

    String scanner.

    Install

    Node.js

    npm install --save sscan

    Browser

    bower install --save sscan

    Usage

     
    var scan = require('sscan');
    var scanner;
     
    scanner = scan('a{www}bc'); // 或者用:scanner = new scan.Scanner('...');
     
    scanner.bos();          // => true   // Begin of String
    scanner.next();         // => '{'
    scanner.takeObject();   // => '{www}'
    scanner.takeWord();     // => 'bc'
    scanner.eos();          // => true  // End of String
     
     

    API

    前言

    异常:

    • SyntaxError: 程序内部出错一般会抛出此类异常,err 实例对象附加了 str 和 pos 两个属性,用来标识出错的字符串及位置
    • Error: 一个常见的错误信息是 "EOS",即如果 err.message === 'EOS' 表示已经解析完字符串了,但你没有捕获到

    两个常见的参数:

    • charMatcher: 单个字符匹配器,可以是一个字符串、正则表达式 或 一个函数:

      • 字符串:只要字符串中含有这个字符,就表示 true。 比如 scanner.isChar('abc') => 当前字符是否在 'abc' 之中
      • 正则表达式:只要正则表达式能匹配这个字符,就表示 true。 比如 scanner.isChar(/[\w0-9]/) => 当前字符能否匹配 /[\w0-9]/
      • 函数:只要函数在接受字符参数后返回 true,那么也表示 true。比如 scanner.isChar(function(ch) {}) => 结果由函数返回值决定
    • quoteMode: 查找字符串的模式,有四种模式:single, double, all, none;分别表示只计算单引号、只计算双 引号,单引号双引号都计算,不计算任何引号.

      出现这个字段的地方,它的默认值都是 all

    str

    输入的字符串常量。

    pos

    当前字符所在的位置。

    char()

    返回当前字符。

    isChar(charMatcher)

    当前字符是否能匹配 charMatchercharMatcher 的含意已经在前言中解释了,下面出现了它的话意思也一样)。

    bos()

    当前位置是否是字符串的开始, Begin of String。

    eos([charMatcher])

    当前位置是否是字符串的结束,End of String。

    另外它能接受一个 charMatcher 参数,如果设置了它,会判断从现在位置到结束位置中的所胡字符串是否都能匹配 charMatcher, 但不会改变当前的 pos

    e.g

    var s = new Scanner('a lll');
    s.next();
     
    s.eos();        // => false
    s.eos(/[\sl]/); // => true
    s.eos('l');     // => false
     

    reset()

    将当前的 pos 重置为 0

    white()

    返回从当前位置开始的空字符串,如果没有一个,则返回 ""

    e.g

    var s = new Scanner('a  b');
     
    s.white();  // => ''
    s.next();
    s.white();  // => '  '
     

    peek([length])

    向下预先查看指定长度的字符,length 默认值为 1 。

    peekRest()

    返回剩下的所有字符串,不改变 pos

    e.g

    var s = new Scanner('abc');
    s.next();
     
    s.peekRest(); // => 'bc'
    s.pos;        // => 1
     

    till([acceptMatcher,] endMatcher [, eosFn])

    从当前位置开始,匹配到 endMatcher 所在的位置为止,中间的所有字符需要匹配 acceptMatcher

    • 如果匹配到最后还没匹配到 endMatcher,则执行 eosFn 函数,函数的参数是中间匹配的所有字符组成的字符串。
    • 如果没有匹配到最后就匹配到了 endMatcher,则直接将中间匹配到的内容返回。
    • 如果中间有字符和 acceptMatcher 不匹配,则抛出异常

    e.g

    var s = new Scanner('abab xyz');
    s.till('ab ', 'x');         // => 'abab '
    s.till('z');                // => 'xy'
    s.till('u', function(rest){
      // `rest` should equal 'z'
    })

    take(charMatcher)

    返回从当前字符开始,所有接下来能匹配 charMatcher 的字符,直到字符串结束;它会改变 pos 属性。

    e.g

    var s = new Scanner('abc def');
     
    s.take(/\w/); // => 'abc'
    s.peekRest(); // => ' def'
     

    takeWord()

    匹配接下来的一个 word,其实它就是调用了 Scanner.take(/\w/) 而已。

    唯一不同的是,如果匹配的结果是个空字符串 "",此函数会抛出异常。

    takeQuote( [quoteMode] )

    匹配字符串中出现的成对的 '"''\'' 字符串,改变 pos 属性到后面那个 quote 的下一个的位置。

    如果匹配失败,会抛出 SyntaxError 。

    e.g

    var s = new Scanner('who "are" you');
    s.takeWord();   // => 'who'
    s.white();      // => ' '
    s.takeQuote();  // => '"are"'
    s.peekRest();   // => ' you'

    takePair( left [, right] [, quoteMode] )

    类似于 Scanner.takeQuote,但它是匹配像 [], {}, <> 这种成对出现的字符的。

    支持 left === right 的模式,即 takePair('|', '|') 会匹配两个 '|' 之间的字符串, 同理它也能匹配像引号这类字符,所以它包含了 takeQuote 的功能了 (v0.2.0 新加功能)。

    如果没有匹配成功会抛出 EOS 异常。

    • 默认的 quoteMode'all',即如果 leftright 中的字符出现在引号中,会忽略掉它;
    • 如果 quoteMode'single',即只有 leftright 中的字符出现在单引号中才会忽略;
    • 其它类推

    e.g

    var s = new Scanner('{"a}"} foo');
     
    s.takePair('{', '}');             // => '{"a}"}'
     
    s.reset();
    s.takePair('{', '}', 'single');   // => '{"a}'  // 只有单引号才算引号,双引号被当作普通字符
     
    // v0.2.0 新功能
    new Scanner('|abc| def').takePair('|');   // => '|abc|'
     

    takeObject([quoteMode])

    Scanner.takePair('{', '}', quoteMode) 的简写形式。

    takeArray([quoteMode])

    Scanner.takePair('[', ']', quoteMode) 的简写形式。

    takeValue()

    takeObject, takeArraytakeQuote 的综合体。

    History

    CHANGELOG

    License

    Copyright (c) 2015 Zhonglei Qiu. Licensed under the MIT license.

    Install

    npm i sscan

    DownloadsWeekly Downloads

    11

    Version

    0.2.0

    License

    MIT

    Last publish

    Collaborators

    • qiu8310