Regular Expressions 101

Save & Share

Flavor

  • PCRE2 (PHP >=7.3)
  • PCRE (PHP <7.3)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java 8
  • .NET 7.0 (C#)
  • Rust
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests

Tools

Sponsors
There are currently no sponsors. Become a sponsor today!
An explanation of your regex will be automatically generated as you type.
Detailed match information will be displayed here automatically.
  • All Tokens
  • Common Tokens
  • General Tokens
  • Anchors
  • Meta Sequences
  • Quantifiers
  • Group Constructs
  • Character Classes
  • Flags/Modifiers
  • Substitution
  • A single character of: a, b or c
    [abc]
  • A character except: a, b or c
    [^abc]
  • A character in the range: a-z
    [a-z]
  • A character not in the range: a-z
    [^a-z]
  • A character in the range: a-z or A-Z
    [a-zA-Z]
  • Any single character
    .
  • Alternate - match either a or b
    a|b
  • Any whitespace character
    \s
  • Any non-whitespace character
    \S
  • Any digit
    \d
  • Any non-digit
    \D
  • Any word character
    \w
  • Any non-word character
    \W
  • Non-capturing group
    (?:...)
  • Capturing group
    (...)
  • Zero or one of a
    a?
  • Zero or more of a
    a*
  • One or more of a
    a+
  • Exactly 3 of a
    a{3}
  • 3 or more of a
    a{3,}
  • Between 3 and 6 of a
    a{3,6}
  • Start of string
    ^
  • End of string
    $
  • A word boundary
    \b
  • Non-word boundary
    \B

Regular Expression
No Match

/
/
gm

Test String

Code Generator

Generated Code

const regex = /^(?<exe>npm)?\ ?(?<run>(?<=\k<exe> )run(?:-script)?)?\ ?(?<command>(?<=\k<run> )[a-z]+(?:[-|:|.|_][a-z]+)?|(?<!\k<run> )[a-z]+(?:[-][a-z]+)?)?\ ?(?<pkgdetails>[a-z0-9\>\=\:\+\#\^\.\@\/][a-z0-9\>\=\:\+\#\^\~\.\@\/\-]+)?\ ?(?<options>(?:\ [-]{1,2}[a-zA-Z]+(?:[-][a-z]+)*)*)?$/gm; // Alternative syntax using RegExp constructor // const regex = new RegExp('^(?<exe>npm)?\\ ?(?<run>(?<=\\k<exe> )run(?:-script)?)?\\ ?(?<command>(?<=\\k<run> )[a-z]+(?:[-|:|.|_][a-z]+)?|(?<!\\k<run> )[a-z]+(?:[-][a-z]+)?)?\\ ?(?<pkgdetails>[a-z0-9\\>\\=\\:\\+\\#\\^\\.\\@\\\/][a-z0-9\\>\\=\\:\\+\\#\\^\\~\\.\\@\\\/\\-]+)?\\ ?(?<options>(?:\\ [-]{1,2}[a-zA-Z]+(?:[-][a-z]+)*)*)?$', 'gm') const str = `npm install cordova-browser@~5.0.1 --production --save npm install --no-package-lock npm -v npm version major npm version minor npm version patch npm run build npm run build:spypkg npm run build-spypkg npm run build.spypkg npm run build_spypkg npm run-script build:spypkg npm run-script build-spypkg npm run-script build.spypkg npm run-script build_spypkg i sots --D i sots --production i sots --production --no-save install sots --production --no-save npm install sots --production --no-save npm install ./package.tgz npm install https://github.com/indexzero/forever/tarball/v0.5.6 npm install sax npm install sax -P npm install sax -D npm install sax -O i npm i i sax i sax -D install install sax -P install sax -D install sax -O npm install githubname/reponame npm install @myorg/privatepackage npm install node-tap --save-dev npm install dtrace-provider --save-optional npm install readable-stream --save-exact npm install ansi-regex --save-bundle npm install sax@latest npm install @myorg/mypackage@latest npm install sax@0.1.1 npm install @myorg/privatepackage@1.5.0 npm install sax@">=0.1.0 <0.2.0" npm install @myorg/privatepackage@">=0.1.0 <0.2.0" npm install git+ssh://git@github.com:npm/cli.git#v1.0.27 npm install git+ssh://git@github.com:npm/cli#semver:^5.0 npm install git+https://isaacs@github.com/npm/cli.git npm install git://github.com/npm/cli.git#v1.0.27 npm install mygithubuser/myproject npm install github:mygithubuser/myproject npm install gist:101a11beef npm install bitbucket:mybitbucketuser/myproject npm install gitlab:mygitlabuser/myproject npm install gitlab:myusr/myproj#semver:^5.0 npm install sax@">=0.1.0 <0.2.0" bench supervisor npm install sax --force`; // Reset `lastIndex` if this regex is defined globally // regex.lastIndex = 0; let m; while ((m = regex.exec(str)) !== null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === regex.lastIndex) { regex.lastIndex++; } // The result can be accessed through the `m`-variable. m.forEach((match, groupIndex) => { console.log(`Found match, group ${groupIndex}: ${match}`); }); }

Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions