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

/
/
g

Test String

Code Generator

Generated Code

const regex = /\/\*[\s\S]*?\*\//g; // Alternative syntax using RegExp constructor // const regex = new RegExp('\\\/\\*[\\s\\S]*?\\*\\\/', 'g') const str = `var ExecutionScript = (function () { function ExecutionScript() { } ExecutionScript.prototype.RemoveSchemes = function (e) { var _this = this; debugger; return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { var selectedRole, currentSchemes, schemesToRemove, tempSchemes, filteredSchemes, _loop_1, newSchemes, _i, schemesToRemove_1, selectedScheme, _a, _b, scheme_1, newSchemes, _c, newSchemes_1, s; return __generator(this, function (_d) { switch (_d.label) { case 0://test selectedRole = e.data.Role_Variable.currentItem.Role.currentItem; currentSchemes = selectedRole.Scheme.value; schemesToRemove = e.plugins.Schemes_From_Data_Grid.SelectedItems; tempSchemes = e.data.Temp_Role_Variable.currentItem.Scheme; _loop_1 = function (selectedScheme) { var _i, filteredSchemes_1, scheme, _a, newSchemes_2, s; return __generator(this, function (_b) { switch (_b.label) { case 0: filteredSchemes = currentSchemes.filter(function (scheme) { return scheme.ID !== selectedScheme.ID; }); _i = 0, filteredSchemes_1 = filteredSchemes; _b.label = 1;/* * testing multline comment */case 1: if (!(_i < filteredSchemes_1.length)) return [3 /*break*/, 4]; scheme = filteredSchemes_1[_i];/* * testing multline comment */ return [4 /*yield*/, tempSchemes.create(1, false, e.data.Temp_Role_Variable.currentItem)]; case 2: /* * testing multline comment */ newSchemes = _b.sent(); for (_a = 0, newSchemes_2 = newSchemes; _a < newSchemes_2.length; _a++) { s = newSchemes_2[_a]; s.Active = scheme.Active; s.Description = scheme.Description; s.DisplayName = scheme.DisplayName; s.Name = scheme.Name; s.Role = scheme.Role; s.SchemeId = scheme.SchemeId; } debugger; tempSchemes.addItems(newSchemes); _b.label = 3; case 3:// _i++; return [3 /*break*/, 1]; case 4: return [2 /*return*/]; } }); };// _i = 0, schemesToRemove_1 = schemesToRemove; _d.label = 1; case 1: if (!(_i < schemesToRemove_1.length)) return [3 /*break*/, 4]; selectedScheme = schemesToRemove_1[_i]; return [5 /*yield**/, _loop_1(selectedScheme)]; case 2: _d.sent(); _d.label = 3; case 3: _i++; return [3 /*break*/, 1]; case 4: // } selectedRole.Scheme.clear(); _a = 0, _b = tempSchemes.value; _d.label = 5; case 5: if (!(_a < _b.length)) return [3 /*break*/, 8]; scheme_1 = _b[_a]; return [4 /*yield*/, selectedRole.Scheme.create(1, false, e.data.Role_Variable.currentItem)]; case 6: newSchemes = _d.sent(); for (_c = 0, newSchemes_1 = newSchemes; _c < newSchemes_1.length; _c++) { s = newSchemes_1[_c]; s.Active = scheme_1.Active; s.Description = scheme_1.Description; s.DisplayName = scheme_1.DisplayName; s.Name = scheme_1.Name; s.Role = scheme_1.Role; s.SchemeId = scheme_1.SchemeId; } selectedRole.Scheme.addItems(newSchemes); _d.label = 7; case 7: _a++; return [3 /*break*/, 5]; case 8: e.data.Role_Variable.currentItem; selectedRole.ConfiguredStatus = 'Complete'; resolve(); return [2 /*return*/]; } }); }); }); }; ExecutionScript.prototype.S_On_Previous = function (e) { e.data.currentUser.currentItem.Role.clear(); }; return ExecutionScript; }());`; // 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