nv-quote

split string with quote

Usage no npm install needed!

<script type="module">
  import nvQuote from 'https://cdn.skypack.dev/nv-quote';
</script>

README

nv-quote

  • nv-quote is very simple util, it will parse-quote and split-the-input-string
  • self-defined quotes

install

  • npm install nv-quote

usage

const nvquote = require("nv-quote")

    {
      JS_QUOTES: [ '`', '"', "'" ],
      PY_QUOTES: [ '"""', "'''", "'", '"' ],
      JSPY_QUOTES: [
        '"""', "'''",
        "'",   '"',
        '`'
      ],
      tokenize: [Function: tokenize],
      split: [Function: split],
      dequote: [Function: dequote]
    }   

example

    var s = `""a'bc'cd"ef"g'''hij'''k"""lmnopq"""r`
    
    nvquote.split(s,nvquote.JSPY_QUOTES)
    [
      '""',   'a',
      "'bc'", 'c',
      'd',    '"ef"',
      'g',    "'''hij'''",
      'k',    '"""lmnopq"""',
      'r'
    ]
    
    nvquote.dequote(s,nvquote.JSPY_QUOTES)
    [
      '',       'a',
      'bc',     'cd',
      'ef',     'g',
      'hij',    'k',
      'lmnopq', 'r'
    ]


    nvquote.tokenize(s,nvquote.JSPY_QUOTES)
    
    [
      Tok {
        str: '',
        type: 'quoted-str',
        raw: '""',
        state: 'finished',
        extra: 3          // means which quote:  JSPY_QUOTES[3] = '"'
      },
      Tok {
        str: 'a',
        type: 'raw',
        raw: 'a',
        state: undefined,
        extra: undefined
      },
      Tok {
        str: 'bc',
        type: 'quoted-str',
        raw: "'bc'",
        state: 'finished',
        extra: 2
      },
      Tok {
        str: 'c',
        type: 'raw',
        raw: 'c',
        state: undefined,
        extra: undefined
      },
      Tok {
        str: 'd',
        type: 'raw',
        raw: 'd',
        state: undefined,
        extra: undefined
      },
      Tok {
        str: 'ef',
        type: 'quoted-str',
        raw: '"ef"',
        state: 'finished',
        extra: 3
      },
      Tok {
        str: 'g',
        type: 'raw',
        raw: 'g',
        state: undefined,
        extra: undefined
      },
      Tok {
        str: 'hij',
        type: 'quoted-str',
        raw: "'''hij'''",
        state: 'finished',
        extra: 1
      },
      Tok {
        str: 'k',
        type: 'raw',
        raw: 'k',
        state: undefined,
        extra: undefined
      },
      Tok {
        str: 'lmnopq',
        type: 'quoted-str',
        raw: '"""lmnopq"""',
        state: 'finished',
        extra: 0
      },
      Tok {
        str: 'r',
        type: 'raw',
        raw: 'r',
        state: undefined,
        extra: undefined
      }
    ]

    //tail with not-closed quote
    s = `""a'bc'cd"ef"g'''hij'''k"""lmnopq"""r'`
    
    > nvquote.split(s,nvquote.JSPY_QUOTES)
    [
      '""',   'a',
      "'bc'", 'c',
      'd',    '"ef"',
      'g',    "'''hij'''",
      'k',    '"""lmnopq"""',
      'r',    "'"
    ]
    >
    > nvquote.dequote(s,nvquote.JSPY_QUOTES)
    [
      '',       'a',
      'bc',     'cd',
      'ef',     'g',
      'hij',    'k',
      'lmnopq', "r'"
    ]
    >

API

  • nvquote.JS_QUOTES
  • nvquote.PY_QUOTES
  • nvquote.JSPY_QUOTES
  • nvquote.split(s,quotes=JS_QUOTES)
  • nvquote.tokenize(s,quotes=JS_QUOTES)
  • nvquote.dequote(s,quotes=JS_QUOTES)

LICENSE

  • ISC