StringScan.js
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
-
~StringScanner
-
.offset ⇒
number
-
.offset ⇒
number
-
.rest ⇒
string
-
.scan(pattern) ⇒
string
|null
-
.scanUntil(pattern) ⇒
string
|null
-
.skip(pattern) ⇒
number
|null
-
.skipUntil(pattern) ⇒
number
|null
-
.check(pattern) ⇒
string
|null
-
.checkUntil(pattern) ⇒
string
|null
-
.charAt(index) ⇒
string
|null
-
.eos() ⇒
boolean
- .reset()
- .terminate()
- .peek()
- .take()
- .toString()
-
.offset ⇒
number
scanner.offset ⇒ 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. |
number
scanner.offset ⇒ Returns the current scan offset.
Kind: instance property of StringScanner
string
scanner.rest ⇒ Returns the remainder of the string after the scan offset.
Kind: instance property of StringScanner
string
| null
scanner.scan(pattern) ⇒ 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. |
string
| null
scanner.scanUntil(pattern) ⇒ 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. |
number
| null
scanner.skip(pattern) ⇒ 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. |
number
| null
scanner.skipUntil(pattern) ⇒ 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. |
string
| null
scanner.check(pattern) ⇒ 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. |
string
| null
scanner.checkUntil(pattern) ⇒ 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. |
string
| null
scanner.charAt(index) ⇒ 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 |
boolean
scanner.eos() ⇒ 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.