stringscan

StringScanner like utility for JS, allowing strings to be parsed piece by piece

Usage no npm install needed!

<script type="module">
  import stringscan from 'https://cdn.skypack.dev/stringscan';
</script>

README

StringScan.js

view on npm js-standard-style

JavaScript implementation of Ruby/Crystal's StringScanner. Useful for writing tokenizers.

Examples

const StringScanner = require('stringscan')
const s = new StringScanner('This is an example string')

s.scan(/\w+/) // "This"
s.scan(/\w+/) // null
s.scan(/\s+/) // " "
s.scan(/\s+/) // null
s.scan(/\w+/) // "is"
s.eos()       // false

s.scan(/\s+/) // " "
s.scan(/\w+/) // "an"
s.scan(/\s+/) // " "
s.scan(/\w+/) // "example"
s.scan(/\s+/) // " "
s.scan(/\w+/) // "string"
s.eos()       // true

s.scan(/\s+/) // null
s.scan(/\w+/) // null

For more examples see the examples directory.

API Reference

stringscan~StringScanner

Kind: inner class of stringscan
See: https://github.com/watzon/stringscan.js/tree/master/examples

scanner.offset ⇒ number

Set the current offset position, keeping it within the bounds of the given string.

Kind: instance property of StringScanner

Param Type Description
position number The position to set the offset to.

scanner.offset ⇒ number

Returns the current scan offset.

Kind: instance property of StringScanner

scanner.rest ⇒ string

Returns the remainder of the string after the scan offset.

Kind: instance property of StringScanner

scanner.scan(pattern) ⇒ string | null

Tries to match the pattern at the current position. If there is a match, the scanner advances to the scan offset, the last match is saved, and it returns the matched string. Otherwise it returns null.

Kind: instance method of StringScanner

Param Type Description
pattern RegExp The pattern to match against.

scanner.scanUntil(pattern) ⇒ string | null

Scans the string until the pattern is matched. Returns the substring up to and including the end of the match, the last match is saved, and advances the scan offset. Returns null if no match.

Kind: instance method of StringScanner

Param Type Description
pattern RegExp The pattern to match against.

scanner.skip(pattern) ⇒ number | null

Attempts to skip over the given pattern beginning with the scan offset. In other words, the pattern is not anchored to the current scan offset.

If there is a match, the scanner advances the scan offset, the last match is saved, and it returns the size of the skipped match. Otherwise it returns null and does not advance the offset.

Kind: instance method of StringScanner

Param Type Description
pattern RegExp The pattern to match against.

scanner.skipUntil(pattern) ⇒ number | null

Attempts to skip until the given pattern is found after the scan offset. In other words, the pattern is not anchored to the current scan offset.

If there is a match, the scanner advances the scan offset, the last match is saved, and it returns the size of the skip. Otherwise it returns null and does not advance the offset.

Kind: instance method of StringScanner

Param Type Description
pattern RegExp The pattern to match against.

scanner.check(pattern) ⇒ string | null

Returns the value that scan would return, without advancing the scan offset. The last match is still saved, however.

Kind: instance method of StringScanner

Param Type Description
pattern RegExp The pattern to match against.

scanner.checkUntil(pattern) ⇒ string | null

Returns the value that scanUntil would return, without advancing the scan offset. The last match is still saved, however.

Kind: instance method of StringScanner

Param Type Description
pattern RegExp The pattern to match against.

scanner.charAt(index) ⇒ string | null

Returns the character at the given index, or null if the index is out of range.

Kind: instance method of StringScanner

Param Type Description
index number The index in the original string to fetch

scanner.eos() ⇒ boolean

Returns true if the scan offset is at the end of the string.

Kind: instance method of StringScanner

scanner.reset()

Resets the scan offset to the beginning and clears the last match.

Kind: instance method of StringScanner

scanner.terminate()

Moves the scan offset to the end of the string and clears the last match.

Kind: instance method of StringScanner

scanner.peek()

Extracts a substring of length len from the current offset, without advancing the scan offset.

Kind: instance method of StringScanner

scanner.take()

Extracts a substring of length len from the current offset, advances the scan offset, and returns the string.

Kind: instance method of StringScanner

scanner.toString()

Returns a string representation of this StringScanner.

Kind: instance method of StringScanner


© 2020 Chris Watson. Licensed under the MIT License. All rights reserved.