Photo by Dan-Cristian Pădureț on Unsplash
_
Summary
Let's imagine that you are in a situation where your company at work doesn't use eslint and doesn't have any short-term plans to install it.
What do you do?
Well, one thing you could do is to try and program by yourself something close enough to eslint.
This is what I tried to do (definitely some type-II fun) and the result is at the following address: https://github.com/AlixFachin/myriotlinter
This post will serve as an introduction to several following about regular expressions in JavaScript and linting.
How does it work
This is a node executable file, so you just need to type: node riotlinter.js <riot-filename>.
The idea is to read the file, separate it into several blocks, and apply a set of rules to each block to list all the errors / warnings and display those nicely afterwards.
Before beginning, one quick word about riot files
Riot.js is a lightweight JavaScript front-end framework.
Riot makes me think a bit about an ancestor of Svelte (i.e. the user doesn't download Riot, but Riot is an actual compiler from xyz.riot towards HTML files).
Riot files are made from three blocks:
- An HTML block at the top
 - A CSS block afterwards, between the 
<style>and</style>tags - A JavaScript block, which can be surrounded by 
<script>and</script>tags, or just without any tags. (Although recent versions or Riot recommend surrounding your code with script tags). 
What I learned in the process
- Do not try to parse HTML with RegExp!
 - JavaScript instructions around RegExp
 - How to build RegExp (spoiler alert: one step at a time)
 
For this post we will only look at a quick introduction regarding RegExp. Have a look at the following posts for more information regarding regexp!
Quick introduction regarding RegExp
A regular expression describes a potential word pattern.
For example, /(\s=\S|\S=\s|\s=\s)/.
This string describes conditions under which a string matches a pattern or not.
At its most basic, we have:
- The pattern matches if the string contains a fixed string: 
/hello/will match with all strings containing the word 'hello'. - One more complicated step is when we authorize a character repeating an unknown number of times. 
/he+llo/will match with 'hello', but as well 'heeeeeello'. The+stands for the character (or group) before must be present at least once. - Similar to above is the '*' which stands for the character (or group) before must be present zero times or more. So 
/he*llo/will match 'hello', 'hllo', 'heeeeeello'. - If we want to match a few character repeating, we can use parenthesis to surround a group. For example, 
/In the mountain you can hear an( echo)+/will match 'In the mountain you can hear an echo', but as well 'In the mountain you can hear an echo echo echo echo`. 
Then you can have:
- Matching not a specific character but a group of characters:
[a-Z]will match every character betweenaandZ.\swill match any character which is whitespace.\Swill match characters which are not whitespace.will match any character except a new line (\n)
 - Matching according to characters before or after the main pattern
(?<x)patternwill match if the pattern is after the pattern X(?<!x)patternwill match if the pattern is not after the pattern xpattern(?x)will match if the pattern is followed by xpattern(?!x)will match if the pattern is not followed by x
 - Matching the pattern according to the position in the string
^patternwill match if the pattern is at the beginning of the stringpattern$will match if the pattern is at the end of the string
 
Some Examples?
| Regular Expression | Meaning? | 
|---|---|
/===/ | 
Matches when there is a triple equal sign in the file | 
/\s=\s/ | 
Equal sign surrounded by two white spaces | 
/\s=\S/ | 
Equal sign with white space before and non-whitespace after | 
Your turn?
How would you write:
- A regular expression which matches if there is no space after an opening curly bracket: 
{abcwould match, but{ abcwould not trigger - A regular expression which matches if there are parenthesis around an indentifier before an arrow function? So that 
(a) =>would match buta =>wouldn't match 
Answers in the next blog post!
See as well
- As usual, Mozilla has a very good tutorial on this so if you are stuck feel free to have a look at: MDN Guide about regular expressions
 - And a live reg-exp parser: https://regexr.com
 
See you next time! 😎