<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: rishi Patel</title>
    <description>The latest articles on DEV Community by rishi Patel (@getutila).</description>
    <link>https://dev.to/getutila</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4077337%2F2e01aa71-6d52-43c6-9cf9-f7245c2333c9.png</url>
      <title>DEV Community: rishi Patel</title>
      <link>https://dev.to/getutila</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/getutila"/>
    <language>en</language>
    <item>
      <title>Regex for Beginners: Practical Patterns You Will Actually Use</title>
      <dc:creator>rishi Patel</dc:creator>
      <pubDate>Fri, 21 Aug 2026 11:01:47 +0000</pubDate>
      <link>https://dev.to/getutila/regex-for-beginners-practical-patterns-you-will-actually-use-4m7m</link>
      <guid>https://dev.to/getutila/regex-for-beginners-practical-patterns-you-will-actually-use-4m7m</guid>
      <description>&lt;p&gt;Learn regex character classes, anchors, and capture groups with JavaScript examples you will actually test. Email validation is harder than it looks.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Regex for Beginners: Practical Patterns You Will Actually Use</title>
      <dc:creator>rishi Patel</dc:creator>
      <pubDate>Wed, 19 Aug 2026 05:40:10 +0000</pubDate>
      <link>https://dev.to/getutila/regex-for-beginners-practical-patterns-you-will-actually-use-2p8c</link>
      <guid>https://dev.to/getutila/regex-for-beginners-practical-patterns-you-will-actually-use-2p8c</guid>
      <description>&lt;h1&gt;
  
  
  Regex for Beginners: Practical Patterns You Will Actually Use
&lt;/h1&gt;

&lt;p&gt;Regular expressions (regex) are patterns used to search, match, extract, and replace text. In JavaScript, you can create them using &lt;code&gt;RegExp&lt;/code&gt; objects or regex literals such as &lt;code&gt;/pattern/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You will use regex for things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finding IDs in log files&lt;/li&gt;
&lt;li&gt;Validating simple input formats&lt;/li&gt;
&lt;li&gt;Extracting values from strings&lt;/li&gt;
&lt;li&gt;Searching for specific patterns&lt;/li&gt;
&lt;li&gt;Replacing parts of text&lt;/li&gt;
&lt;li&gt;Splitting text based on patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need to memorize hundreds of regex symbols. A small set of patterns covers most everyday use cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Read a Regex Pattern
&lt;/h2&gt;

&lt;p&gt;Here are some of the most common regex components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.&lt;/code&gt; matches almost any character except a line break.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;*&lt;/code&gt; means zero or more occurrences.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;+&lt;/code&gt; means one or more occurrences.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;?&lt;/code&gt; means zero or one occurrence.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;^&lt;/code&gt; matches the beginning of a string.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$&lt;/code&gt; matches the end of a string.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;(...)&lt;/code&gt; creates a capture group.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;(?:...)&lt;/code&gt; creates a non-capturing group.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;\d&lt;/code&gt; matches a digit.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;\w&lt;/code&gt; matches a word character.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;\s&lt;/code&gt; matches whitespace.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/^&lt;/span&gt;&lt;span class="nx"&gt;ERROR&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This matches a string that starts with &lt;code&gt;ERROR&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;And:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;matches one or more digits.&lt;/p&gt;

&lt;p&gt;A useful way to practice these patterns is with a &lt;a href="https://utila-phi.vercel.app/en/developer/regex-tester" rel="noopener noreferrer"&gt;JavaScript Regex Tester&lt;/a&gt;. You can enter a pattern and test it against sample text before putting it into your application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Character Classes You Will Actually Use
&lt;/h2&gt;

&lt;p&gt;Character classes let you define which characters can appear at a particular position.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;matches an uppercase letter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;matches a digit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;aeiou&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;matches any lowercase vowel.&lt;/p&gt;

&lt;p&gt;You can also create ranges:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;Z0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This matches uppercase letters or digits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Practical Example
&lt;/h3&gt;

&lt;p&gt;Suppose you have a product SKU:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sku&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SKU-WIDGET-09&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^SKU-&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;A-Z&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;+-&lt;/span&gt;&lt;span class="se"&gt;\d{2}&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sku&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The pattern means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;^&lt;/code&gt; → start of the string&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SKU-&lt;/code&gt; → literal text&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[A-Z]+&lt;/code&gt; → one or more uppercase letters&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-&lt;/code&gt; → literal hyphen&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;\d{2}&lt;/code&gt; → exactly two digits&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$&lt;/code&gt; → end of the string&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the pattern is anchored with &lt;code&gt;^&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt;, the entire string must follow the expected format.&lt;/p&gt;

&lt;h2&gt;
  
  
  Anchors Prevent Accidental Matches
&lt;/h2&gt;

&lt;p&gt;One of the most common beginner mistakes is forgetting anchors.&lt;/p&gt;

&lt;p&gt;Consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/id-&lt;/span&gt;&lt;span class="se"&gt;\d&lt;/span&gt;&lt;span class="sr"&gt;+/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;valid-id-99-extra&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The regex found &lt;code&gt;id-99&lt;/code&gt; inside the larger string.&lt;/p&gt;

&lt;p&gt;If you want the &lt;strong&gt;entire string&lt;/strong&gt; to match the format, use anchors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^id-&lt;/span&gt;&lt;span class="se"&gt;\d&lt;/span&gt;&lt;span class="sr"&gt;+$/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id-99&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// true&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id-99-extra&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This distinction is important.&lt;/p&gt;

&lt;p&gt;Use unanchored patterns when you want to &lt;strong&gt;find something inside a string&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Use anchored patterns when you want to &lt;strong&gt;validate the complete string&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capture Groups: Extract Data From Text
&lt;/h2&gt;

&lt;p&gt;Parentheses create capture groups.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Order ID: 8f3a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/Order ID: &lt;/span&gt;&lt;span class="se"&gt;([&lt;/span&gt;&lt;span class="sr"&gt;a-z0-9&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;+&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;/i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// 8f3a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first capture group contains the order ID.&lt;/p&gt;

&lt;p&gt;Named capture groups can make this even easier to understand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-08-14T06:30:00Z GET /orders/8f3a status=404&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;regex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;(?&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;timestamp&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\S&lt;/span&gt;&lt;span class="sr"&gt;+&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt; &lt;/span&gt;&lt;span class="se"&gt;(?&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;method&amp;gt;GET|POST&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt; &lt;/span&gt;&lt;span class="se"&gt;(?&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;path&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\S&lt;/span&gt;&lt;span class="sr"&gt;+&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt; status=&lt;/span&gt;&lt;span class="se"&gt;(?&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;status&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\d{3})&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;regex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// 404&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the captured value has a meaningful name instead of requiring you to remember which numbered group it belongs to.&lt;/p&gt;

&lt;p&gt;After extracting a value, use normal JavaScript for further processing.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;statusCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;statusCode&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Request failed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Regex is good at &lt;strong&gt;finding patterns&lt;/strong&gt;. It shouldn't be used for arithmetic or complicated data processing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't Use Regex to Parse Everything
&lt;/h2&gt;

&lt;p&gt;Regex is useful, but it isn't the right tool for every problem.&lt;/p&gt;

&lt;p&gt;For example, if a captured value contains JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jsonText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;{"name":"John","age":25}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Don't try to parse the JSON structure with a complicated regex.&lt;/p&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jsonText&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Similarly, if you need to work with query parameters, use URL APIs instead of building increasingly complicated regex patterns.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/search?q=javascript&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;searchParams&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;q&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// javascript&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The rule is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use regex to identify a pattern. Use a proper parser when the data has its own syntax.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Email Validation Is Harder Than It Looks
&lt;/h2&gt;

&lt;p&gt;You will often see regex patterns like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/^&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;@]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;@[&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;@]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="p"&gt;.[&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;@]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can be useful as a basic user-interface check, but it is not a complete email validator.&lt;/p&gt;

&lt;p&gt;Email syntax is considerably more complicated than:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A very strict regex can also reject addresses that are technically valid.&lt;/p&gt;

&lt;p&gt;For normal web applications, a better approach is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt;
  &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
  &lt;span class="na"&gt;autocomplete=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
  &lt;span class="na"&gt;required&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then send a confirmation email when the address actually matters.&lt;/p&gt;

&lt;p&gt;Think of client-side regex as a &lt;strong&gt;UX filter&lt;/strong&gt;, not proof that an email address exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful Regex Snippets
&lt;/h2&gt;

&lt;p&gt;Here are a few patterns worth keeping in your snippet collection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Remove trailing slashes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/orders/8f3a/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sr"&gt;+$/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// /orders/8f3a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Match a UUID-shaped value
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uuid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;0-9a-f&lt;/span&gt;&lt;span class="se"&gt;]{8}&lt;/span&gt;&lt;span class="sr"&gt;-&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;0-9a-f&lt;/span&gt;&lt;span class="se"&gt;]{4}&lt;/span&gt;&lt;span class="sr"&gt;-4&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;0-9a-f&lt;/span&gt;&lt;span class="se"&gt;]{3}&lt;/span&gt;&lt;span class="sr"&gt;-&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;89ab&lt;/span&gt;&lt;span class="se"&gt;][&lt;/span&gt;&lt;span class="sr"&gt;0-9a-f&lt;/span&gt;&lt;span class="se"&gt;]{3}&lt;/span&gt;&lt;span class="sr"&gt;-&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;0-9a-f&lt;/span&gt;&lt;span class="se"&gt;]{12}&lt;/span&gt;&lt;span class="sr"&gt;/i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This checks the general shape of a UUID v4.&lt;/p&gt;

&lt;p&gt;It does not prove that the value is valid in every possible context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check a simple comma-separated list
&lt;/h3&gt;

&lt;p&gt;If you specifically expect three integers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;\d&lt;/span&gt;&lt;span class="sr"&gt;+,&lt;/span&gt;&lt;span class="se"&gt;\d&lt;/span&gt;&lt;span class="sr"&gt;+,&lt;/span&gt;&lt;span class="se"&gt;\d&lt;/span&gt;&lt;span class="sr"&gt;+$/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;10,20,30&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But don't try to build a full CSV parser with regex. CSV has quoting and escaping rules that are better handled by a proper parser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Password Regex Isn't a Complete Security Policy
&lt;/h2&gt;

&lt;p&gt;A common password regex requires an uppercase letter, lowercase letter, and number:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/^&lt;/span&gt;&lt;span class="p"&gt;(?&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;])(?&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;])(?&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;).{&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,}&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It looks useful, but rules like this can encourage passwords such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Password1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A better password policy usually focuses on sufficient length and checking passwords against known breached-password lists.&lt;/p&gt;

&lt;p&gt;Regex can help with basic UI feedback, but it shouldn't be treated as a complete password-security solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Never paste real passwords into an online regex tester.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Test Your Regex Before Using It
&lt;/h2&gt;

&lt;p&gt;Don't test a regex with only one successful example.&lt;/p&gt;

&lt;p&gt;Create several positive and negative cases.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;regex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^id-&lt;/span&gt;&lt;span class="se"&gt;\d&lt;/span&gt;&lt;span class="sr"&gt;+$/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;valid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id-1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id-42&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id-1042&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;invalid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id-&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id-42-extra&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;regex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; should match`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;invalid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;regex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; should not match`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At minimum, test:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A normal valid value&lt;/li&gt;
&lt;li&gt;Another valid value&lt;/li&gt;
&lt;li&gt;An empty string&lt;/li&gt;
&lt;li&gt;A partial value&lt;/li&gt;
&lt;li&gt;A value with an unexpected suffix&lt;/li&gt;
&lt;li&gt;A value with unexpected characters&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Testing negative cases is especially important when regex is being used for validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Be Careful With Catastrophic Backtracking
&lt;/h2&gt;

&lt;p&gt;Some regex patterns can become extremely slow with certain inputs.&lt;/p&gt;

&lt;p&gt;A classic example is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running a pattern with nested repetitions against a long string can cause excessive backtracking.&lt;/p&gt;

&lt;p&gt;This becomes especially important when regex runs against user-controlled input.&lt;/p&gt;

&lt;p&gt;For server-side applications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep patterns simple.&lt;/li&gt;
&lt;li&gt;Avoid unnecessary nested quantifiers.&lt;/li&gt;
&lt;li&gt;Test patterns with long inputs.&lt;/li&gt;
&lt;li&gt;Don't blindly execute arbitrary user-provided regex.&lt;/li&gt;
&lt;li&gt;Consider regex execution limits when appropriate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security issues caused by problematic regular expressions are commonly referred to as &lt;strong&gt;Regular Expression Denial of Service (ReDoS)&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript Regex Flags
&lt;/h2&gt;

&lt;p&gt;Flags change how a regex behaves.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;i&lt;/code&gt; — Case insensitive
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;hello&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Matches:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hello
Hello
HELLO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;g&lt;/code&gt; — Global matching
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;hello&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finds multiple occurrences instead of stopping after the first match.&lt;/p&gt;

&lt;p&gt;Be careful when reusing regex objects with the &lt;code&gt;g&lt;/code&gt; flag because methods such as &lt;code&gt;exec()&lt;/code&gt; maintain &lt;code&gt;lastIndex&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;m&lt;/code&gt; — Multiline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/^&lt;/span&gt;&lt;span class="nx"&gt;ERROR&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Allows &lt;code&gt;^&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt; to work with individual lines in multiline text.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;u&lt;/code&gt; — Unicode
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;F4A1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;u
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;u&lt;/code&gt; flag enables Unicode-aware behavior for patterns that require it.&lt;/p&gt;

&lt;p&gt;Don't add flags simply because they exist. Use them when the behavior they provide is actually needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Regex vs Normal String Methods
&lt;/h2&gt;

&lt;p&gt;Regex isn't always the clearest solution.&lt;/p&gt;

&lt;p&gt;If you need to check whether a string starts with &lt;code&gt;"foo"&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;foo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is usually clearer than:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/^&lt;/span&gt;&lt;span class="nx"&gt;foo&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Similarly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;foo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is often better than creating a regex when you're only looking for a literal substring.&lt;/p&gt;

&lt;p&gt;A good rule is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use string methods for simple literal operations. Use regex when the requirement is actually a pattern.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Should beginners learn regex?
&lt;/h3&gt;

&lt;p&gt;Yes, but you don't need to memorize everything.&lt;/p&gt;

&lt;p&gt;Start with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\d
\w
\s
[]
()
^
$
*
+
?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then practice them on real examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does &lt;code&gt;/id-\d+/&lt;/code&gt; match &lt;code&gt;id-12&lt;/code&gt; inside &lt;code&gt;id-12-extra&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;Because the regex isn't anchored.&lt;/p&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;/^&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;when you want the entire string to match.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is JavaScript regex the same as Python regex?
&lt;/h3&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;Regex flavors differ between programming languages and tools. Features, escaping rules, Unicode behavior, and supported syntax can vary.&lt;/p&gt;

&lt;p&gt;Always test the regex in the same flavor that will run in production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can regex validate JSON?
&lt;/h3&gt;

&lt;p&gt;Not reliably.&lt;/p&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for JSON.&lt;/p&gt;

&lt;p&gt;Regex can be useful for extracting a JSON-looking section from a larger log, after which you can pass that section to a proper JSON parser.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why shouldn't I use a huge regex to validate email?
&lt;/h3&gt;

&lt;p&gt;Because email syntax is complicated, and overly strict patterns can reject valid addresses.&lt;/p&gt;

&lt;p&gt;Use basic browser validation for user experience and email confirmation when you actually need to verify ownership.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it safe to paste production logs into a regex tester?
&lt;/h3&gt;

&lt;p&gt;Not if the logs contain sensitive information.&lt;/p&gt;

&lt;p&gt;Production logs may contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access tokens&lt;/li&gt;
&lt;li&gt;Session cookies&lt;/li&gt;
&lt;li&gt;Email addresses&lt;/li&gt;
&lt;li&gt;API keys&lt;/li&gt;
&lt;li&gt;Personal information&lt;/li&gt;
&lt;li&gt;Request payloads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use fake or redacted data instead.&lt;/p&gt;

&lt;p&gt;If you want to experiment with JavaScript regex patterns, you can use the &lt;a href="https://utila-phi.vercel.app/en/developer/regex-tester" rel="noopener noreferrer"&gt;Utila Regex Tester&lt;/a&gt; with safe sample data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaway
&lt;/h2&gt;

&lt;p&gt;Regex becomes much easier when you stop trying to memorize every symbol and start thinking about the pattern you actually need.&lt;/p&gt;

&lt;p&gt;Learn these concepts first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Character classes&lt;/li&gt;
&lt;li&gt;Quantifiers&lt;/li&gt;
&lt;li&gt;Anchors&lt;/li&gt;
&lt;li&gt;Capture groups&lt;/li&gt;
&lt;li&gt;Flags&lt;/li&gt;
&lt;li&gt;Positive and negative test cases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then apply them to small, real problems.&lt;/p&gt;

&lt;p&gt;And remember: &lt;strong&gt;regex is a pattern-matching tool, not a replacement for proper parsers, validators, or security controls.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you're unsure whether a pattern works, test it with multiple positive and negative examples before putting it into production.&lt;/p&gt;

&lt;p&gt;You can practice the examples from this article using the &lt;a href="https://utila-phi.vercel.app/en/developer/regex-tester" rel="noopener noreferrer"&gt;Utila JavaScript Regex Tester&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Best Free Developer Tools You Can Use in the Browser</title>
      <dc:creator>rishi Patel</dc:creator>
      <pubDate>Mon, 17 Aug 2026 06:16:05 +0000</pubDate>
      <link>https://dev.to/getutila/best-free-developer-tools-you-can-use-in-the-browser-1ee3</link>
      <guid>https://dev.to/getutila/best-free-developer-tools-you-can-use-in-the-browser-1ee3</guid>
      <description>

&lt;p&gt;title: "Best Free Developer Tools You Can Use in the Browser (2026)"&lt;br&gt;
published: false&lt;br&gt;
tags: webdev, javascript, productivity, beginners&lt;/p&gt;

&lt;p&gt;You don't need forty command-line tools installed for work that happens once a week.&lt;/p&gt;

&lt;p&gt;Formatting a JSON response, generating a UUID for a test fixture, decoding Base64, checking a regex, or converting a URL can often be done directly in your browser.&lt;/p&gt;

&lt;p&gt;A local CLI still wins for automation, CI pipelines, Git hooks, and large files. But for quick, one-off tasks, a focused browser tool can be faster and more convenient.&lt;/p&gt;

&lt;p&gt;The important part is privacy: prefer tools that process your data locally in the browser, and never paste secrets, access tokens, passwords, or customer data into an online tool.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Browser Developer Tools Are Useful
&lt;/h2&gt;

&lt;p&gt;A developer's machine can quickly become crowded with utilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;jq&lt;/code&gt; for JSON&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;uuidgen&lt;/code&gt; for UUIDs&lt;/li&gt;
&lt;li&gt;Base64 tools&lt;/li&gt;
&lt;li&gt;Regex testers&lt;/li&gt;
&lt;li&gt;URL encoders&lt;/li&gt;
&lt;li&gt;JSON viewers&lt;/li&gt;
&lt;li&gt;Color converters&lt;/li&gt;
&lt;li&gt;HTML and CSS formatters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each tool makes sense when you install it. The problem is remembering which command to use when you need it six months later.&lt;/p&gt;

&lt;p&gt;Browser-based utilities can remove that friction for simple tasks.&lt;/p&gt;

&lt;p&gt;They are particularly useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You are working on a machine where you cannot install software.&lt;/li&gt;
&lt;li&gt;You need to inspect a copied API response.&lt;/li&gt;
&lt;li&gt;You are working from a phone or tablet.&lt;/li&gt;
&lt;li&gt;You only need the tool once.&lt;/li&gt;
&lt;li&gt;You don't want to remember another CLI command.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They don't replace your development environment. They simply make small tasks easier.&lt;/p&gt;
&lt;h2&gt;
  
  
  JSON: Format, Validate, View, and Minify
&lt;/h2&gt;

&lt;p&gt;JSON is everywhere in modern development.&lt;/p&gt;

&lt;p&gt;You might copy a response from the browser Network tab and discover that it is one giant line of text.&lt;/p&gt;

&lt;p&gt;A JSON formatter makes it readable:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://utila-phi.vercel.app/en/developer/json-formatter" rel="noopener noreferrer"&gt;https://utila-phi.vercel.app/en/developer/json-formatter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you only want to know whether the JSON is valid, use a validator:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://utila-phi.vercel.app/en/developer/json-validator" rel="noopener noreferrer"&gt;https://utila-phi.vercel.app/en/developer/json-validator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For deeply nested objects, a JSON viewer can be easier to navigate:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://utila-phi.vercel.app/en/developer/json-viewer" rel="noopener noreferrer"&gt;https://utila-phi.vercel.app/en/developer/json-viewer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And when you need to remove unnecessary whitespace:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://utila-phi.vercel.app/en/developer/json-minifier" rel="noopener noreferrer"&gt;https://utila-phi.vercel.app/en/developer/json-minifier&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Alex"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"skills"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"JavaScript"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"React"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Node.js"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is much easier to inspect than a minified version.&lt;/p&gt;

&lt;p&gt;For scripts and automation, however, &lt;code&gt;jq&lt;/code&gt; is still the better choice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jq &lt;span class="s1"&gt;'.orders[0].totals'&lt;/span&gt; checkout.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A browser formatter is for quick inspection. &lt;code&gt;jq&lt;/code&gt; is for actual workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Be Careful With Sensitive JSON
&lt;/h3&gt;

&lt;p&gt;Never paste production data containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authorization headers&lt;/li&gt;
&lt;li&gt;Refresh tokens&lt;/li&gt;
&lt;li&gt;API keys&lt;/li&gt;
&lt;li&gt;Passwords&lt;/li&gt;
&lt;li&gt;Session cookies&lt;/li&gt;
&lt;li&gt;Customer information&lt;/li&gt;
&lt;li&gt;Payment information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Replace sensitive values with something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"token"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"REDACTED"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;before using a browser-based utility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Base64: Encoding Is Not Encryption
&lt;/h2&gt;

&lt;p&gt;Base64 appears frequently in development.&lt;/p&gt;

&lt;p&gt;You may encounter it in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data URLs&lt;/li&gt;
&lt;li&gt;HTTP headers&lt;/li&gt;
&lt;li&gt;Email attachments&lt;/li&gt;
&lt;li&gt;Configuration files&lt;/li&gt;
&lt;li&gt;JWT structures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For quick conversions, you can use a Base64 encoder or decoder.&lt;/p&gt;

&lt;p&gt;One important thing to remember:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Base64 is encoding, not encryption.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Anyone who has the encoded value can decode it.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;header&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;atob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;eyJhbGciOiJub25lIn0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can help you inspect the structure of encoded data, but decoding something does not prove that it is authentic or secure.&lt;/p&gt;

&lt;p&gt;Never paste a real access token into a website just because you only want to decode it.&lt;/p&gt;

&lt;h2&gt;
  
  
  UUID: Generate IDs Quickly
&lt;/h2&gt;

&lt;p&gt;Developers constantly need temporary identifiers.&lt;/p&gt;

&lt;p&gt;You might need UUIDs for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Test data&lt;/li&gt;
&lt;li&gt;Fixtures&lt;/li&gt;
&lt;li&gt;Mock API responses&lt;/li&gt;
&lt;li&gt;Database examples&lt;/li&gt;
&lt;li&gt;Development records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modern browsers also provide:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randomUUID&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A UUID generator is convenient when you need several IDs without opening a terminal.&lt;/p&gt;

&lt;p&gt;However, a generated UUID should not be treated as proof of identity or authentication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Timestamp Conversion
&lt;/h2&gt;

&lt;p&gt;Timestamps are another common source of confusion.&lt;/p&gt;

&lt;p&gt;You might see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1723593600
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and wonder whether it represents seconds or milliseconds.&lt;/p&gt;

&lt;p&gt;A timestamp converter can make these values easier to understand.&lt;/p&gt;

&lt;p&gt;This is especially useful when debugging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API responses&lt;/li&gt;
&lt;li&gt;JWT expiration times&lt;/li&gt;
&lt;li&gt;Server logs&lt;/li&gt;
&lt;li&gt;Database records&lt;/li&gt;
&lt;li&gt;Unix timestamps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When working with authentication, remember that timestamps such as &lt;code&gt;exp&lt;/code&gt; are important to interpret correctly. Mixing seconds and milliseconds can produce very confusing bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Regex Testing
&lt;/h2&gt;

&lt;p&gt;Regular expressions are powerful, but they are also easy to get wrong.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;^ERROR \d{4}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;might be used to find log messages beginning with an error code.&lt;/p&gt;

&lt;p&gt;Instead of repeatedly changing your code just to test a pattern, use a regex tester.&lt;/p&gt;

&lt;p&gt;A tester lets you experiment with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Patterns&lt;/li&gt;
&lt;li&gt;Capture groups&lt;/li&gt;
&lt;li&gt;Matches&lt;/li&gt;
&lt;li&gt;Sample input&lt;/li&gt;
&lt;li&gt;Flags&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But don't blindly copy a regex from a random blog post into production.&lt;/p&gt;

&lt;p&gt;Email validation is a particularly common example where seemingly simple regex solutions can become complicated.&lt;/p&gt;

&lt;p&gt;Use a tester to experiment, then validate the final behavior in your application.&lt;/p&gt;

&lt;h2&gt;
  
  
  URL Encoding and Decoding
&lt;/h2&gt;

&lt;p&gt;URLs become difficult to read when query parameters contain spaces, special characters, or non-ASCII text.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hello world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;may need to become:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hello%20world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In JavaScript, you will commonly use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;encodeURIComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello world&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For query parameter values, &lt;code&gt;encodeURIComponent()&lt;/code&gt; is generally the appropriate tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  HTML and CSS Formatting
&lt;/h2&gt;

&lt;p&gt;Sometimes you receive a minified HTML or CSS snippet and simply want to make it readable.&lt;/p&gt;

&lt;p&gt;You don't necessarily need to open your entire project for that.&lt;/p&gt;

&lt;p&gt;These tools are useful for inspecting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email HTML&lt;/li&gt;
&lt;li&gt;Copied snippets&lt;/li&gt;
&lt;li&gt;Minified assets&lt;/li&gt;
&lt;li&gt;Small debugging examples&lt;/li&gt;
&lt;li&gt;Third-party markup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They don't replace Prettier or your project's formatting configuration.&lt;/p&gt;

&lt;p&gt;For a real codebase, use the formatter configured by your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Color Conversion
&lt;/h2&gt;

&lt;p&gt;Developers and designers frequently move between color formats.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#1B4D3E
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can be represented as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rgb(27, 77, 62)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful when working with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;Design tokens&lt;/li&gt;
&lt;li&gt;Component libraries&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Theme configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When You Should Still Use the CLI
&lt;/h2&gt;

&lt;p&gt;Browser tools are convenient, but they are not the answer to everything.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. You're automating something
&lt;/h3&gt;

&lt;p&gt;If a task runs in CI, a script, or a Git hook, use a proper command-line tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. You're working with large files
&lt;/h3&gt;

&lt;p&gt;A multi-megabyte JSON dump is not a good candidate for a browser text area.&lt;/p&gt;

&lt;p&gt;Use tools such as &lt;code&gt;jq&lt;/code&gt; or your normal development environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. You need files from disk
&lt;/h3&gt;

&lt;p&gt;If your workflow depends on files, directories, streams, or shell pipelines, the CLI is usually more appropriate.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. You're handling secrets
&lt;/h3&gt;

&lt;p&gt;Sensitive production information should stay in trusted local tools and appropriate secrets-management systems.&lt;/p&gt;

&lt;p&gt;Don't upload confidential information simply because a website claims to be free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Browser vs CLI
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Browser&lt;/th&gt;
&lt;th&gt;CLI / Editor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Format copied JSON&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validate JSON in CI&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Generate a few UUIDs&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Generate IDs in a script&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decode a small Base64 value&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Process thousands of files&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run transformations automatically&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Format an entire project&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inspect a small copied snippet&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The browser is excellent for quick, manual tasks.&lt;/p&gt;

&lt;p&gt;The CLI is better for repeatable and automated tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Choose a Browser Developer Tool
&lt;/h2&gt;

&lt;p&gt;Not every "free online tool" deserves your trust.&lt;/p&gt;

&lt;p&gt;Before using one, ask a few questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the processing happen locally?
&lt;/h3&gt;

&lt;p&gt;If your browser can process the input without sending it to a server, that's preferable for sensitive workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it validate the input?
&lt;/h3&gt;

&lt;p&gt;A formatter should not silently make invalid JSON look valid.&lt;/p&gt;

&lt;p&gt;You want clear errors when something is wrong.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can you use it without creating an account?
&lt;/h3&gt;

&lt;p&gt;For a simple one-off operation, requiring an account may add unnecessary friction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the tool follow a real specification?
&lt;/h3&gt;

&lt;p&gt;For technical utilities, standards matter.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RFC 8259 for JSON&lt;/li&gt;
&lt;li&gt;RFC 4648 for Base64&lt;/li&gt;
&lt;li&gt;The URL Standard&lt;/li&gt;
&lt;li&gt;JavaScript specifications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Documentation and specifications are better references than random snippets.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Developer Toolkit
&lt;/h2&gt;

&lt;p&gt;You don't need a separate website for every tiny task.&lt;/p&gt;

&lt;p&gt;A small collection of reliable utilities can cover a surprising amount of everyday work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSON formatter&lt;/li&gt;
&lt;li&gt;JSON validator&lt;/li&gt;
&lt;li&gt;JSON viewer&lt;/li&gt;
&lt;li&gt;JSON minifier&lt;/li&gt;
&lt;li&gt;Base64 encoder&lt;/li&gt;
&lt;li&gt;Base64 decoder&lt;/li&gt;
&lt;li&gt;UUID generator&lt;/li&gt;
&lt;li&gt;Timestamp converter&lt;/li&gt;
&lt;li&gt;Regex tester&lt;/li&gt;
&lt;li&gt;URL encoder&lt;/li&gt;
&lt;li&gt;URL decoder&lt;/li&gt;
&lt;li&gt;HTML formatter&lt;/li&gt;
&lt;li&gt;CSS formatter&lt;/li&gt;
&lt;li&gt;HEX to RGB converter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to replace your IDE.&lt;/p&gt;

&lt;p&gt;The goal is to reduce friction when you need to perform a small task quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Are browser-based developer tools safe for production data?
&lt;/h3&gt;

&lt;p&gt;They are safer when processing happens locally in the browser, but you should still avoid pasting secrets or personally identifiable information.&lt;/p&gt;

&lt;p&gt;For production data, a local tool is usually the safer choice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why not just use VS Code?
&lt;/h3&gt;

&lt;p&gt;You should use VS Code when the file is already part of your project.&lt;/p&gt;

&lt;p&gt;Browser tools are useful when you are dealing with a copied string, a quick test, a phone, or a machine without your normal development environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is &lt;code&gt;jq&lt;/code&gt; obsolete if I have a JSON formatter?
&lt;/h3&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;A formatter displays JSON.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;jq&lt;/code&gt; can filter, transform, map, and process JSON as part of scripts and pipelines.&lt;/p&gt;

&lt;p&gt;They solve different problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I trust UUID generators on websites?
&lt;/h3&gt;

&lt;p&gt;Look for implementations based on secure random generation and prefer tools that process the value locally.&lt;/p&gt;

&lt;p&gt;Also remember that a UUID is an identifier, not an authentication mechanism.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need a separate tool for every format?
&lt;/h3&gt;

&lt;p&gt;Not necessarily.&lt;/p&gt;

&lt;p&gt;A relatively small collection covering JSON, Base64, UUID, regex, URL, HTML, and CSS can handle many common one-off developer tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Browser developer tools are not replacements for your terminal, IDE, or development workflow.&lt;/p&gt;

&lt;p&gt;They are complements.&lt;/p&gt;

&lt;p&gt;Use the browser when you need to quickly format a copied JSON response, generate a UUID, decode Base64, test a regex, encode a URL, or convert a color.&lt;/p&gt;

&lt;p&gt;Use the CLI when the task becomes repeatable, automated, large, or security-sensitive.&lt;/p&gt;

&lt;p&gt;The best tool is usually the one that matches the job.&lt;/p&gt;

&lt;p&gt;If you want a single collection of these utilities instead of searching for a different website every time, explore the Utila Developer Hub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://utila-phi.vercel.app/en/developer" rel="noopener noreferrer"&gt;https://utila-phi.vercel.app/en/developer&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
