<?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>Forem: Maks Vozbraniuk</title>
    <description>The latest articles on Forem by Maks Vozbraniuk (@vozmi).</description>
    <link>https://forem.com/vozmi</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F874116%2F7e0b407a-c7f0-40b6-9364-2f7c39f80825.png</url>
      <title>Forem: Maks Vozbraniuk</title>
      <link>https://forem.com/vozmi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/vozmi"/>
    <language>en</language>
    <item>
      <title>Find and replace like a pro. Regular expressions in VS Code</title>
      <dc:creator>Maks Vozbraniuk</dc:creator>
      <pubDate>Thu, 02 Nov 2023 09:53:33 +0000</pubDate>
      <link>https://forem.com/vozmi/find-and-replace-like-a-pro-regular-expressions-in-vs-code-2pbf</link>
      <guid>https://forem.com/vozmi/find-and-replace-like-a-pro-regular-expressions-in-vs-code-2pbf</guid>
      <description>&lt;h3&gt;
  
  
  Table of contents:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What is regular expressions&lt;/li&gt;
&lt;li&gt;Capturing groups&lt;/li&gt;
&lt;li&gt;Regex in VS Code&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="what-is-regex"&gt;What is regular expressions?&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Regular expressions (also called regex) are patterns used to match character combinations in strings &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions" rel="noopener noreferrer"&gt;[MDN]&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For example, regex &lt;code&gt;/popular|expressions/&lt;/code&gt; will match word &lt;strong&gt;expressions&lt;/strong&gt; in sentence "Regular expressions entered popular use from 1968".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fan92b9mrmvvgxsgbvlq6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fan92b9mrmvvgxsgbvlq6.png" alt="Regexp example" width="700" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="capturing-groups"&gt;Capturing groups&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Groups group multiple patterns as a whole, and capturing groups provide extra submatch information when using a regular expression pattern to match against a string. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions/Groups_and_backreferences" rel="noopener noreferrer"&gt;[MDN]&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Usually, to create capturing group you should use parentheses and put group regex into it. It’s very convinient when you want to use this group later.&lt;/p&gt;

&lt;p&gt;For example we can use &lt;code&gt;/const (.*) = /&lt;/code&gt; to capture variable name (&lt;code&gt;getUser&lt;/code&gt;) from code &lt;code&gt;const getUser = () =&amp;gt; {...}&lt;/code&gt; into group.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu6mbzpvvkj6t1tqalnk1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu6mbzpvvkj6t1tqalnk1.png" alt="Regexp group example" width="700" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;JS Example&lt;/h3&gt;

&lt;p&gt;In JavaScript as a result of &lt;code&gt;.match()&lt;/code&gt; we get an array where first item is a whole match and other items are captured groups.&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;const getUser = () =&amp;gt; {…}&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;/const &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; = /&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="nx"&gt;regex&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="c1"&gt;// ['const getUser = ', 'getUser']&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2 id="regex-in-vs-code"&gt;Regex in VS Code&lt;/h2&gt;

&lt;p&gt;In VS Code you can efficiently search and replace some text in your project. Often you don't need regex for that. But sometimes regular expressions can save a lot of time (for instance, during refactoring).&lt;/p&gt;

&lt;p&gt;VS Code allows us to use captured groups in replace section as &lt;code&gt;$1&lt;/code&gt; &lt;code&gt;$2&lt;/code&gt; &lt;code&gt;$3&lt;/code&gt; &lt;code&gt;$n&lt;/code&gt; (where 1,2,3..n is a group number)&lt;/p&gt;

&lt;p&gt;For example, in React you can easily switch between general TS function types to &lt;code&gt;React.FC&lt;/code&gt; types:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm22wo98s95kcrnfb98gy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm22wo98s95kcrnfb98gy.png" alt="VS Code replace example (to React.FC)" width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuv8rv1qusz4obr5iuqlu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuv8rv1qusz4obr5iuqlu.png" alt="VS Code replace example (from React.FC)" width="800" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Regular expressions is a powerful tool when you want to search some patterns in text. As developers we can use it not only in the code itself (e.g. phone number validation), but also to simplify some tasks we face.&lt;/p&gt;

&lt;p&gt;If you want to learn more about regular expressions, I want to suggest you these resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://regex101.com" rel="noopener noreferrer"&gt;regex101&lt;/a&gt; - there you can test your regular expressions and get some hints&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fj3w7flsoluvp2djiqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fj3w7flsoluvp2djiqt.png" alt="regex101" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Regular Expressions course on FreeCodeCamp (as part of &lt;a href="https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/#regular-expressions" rel="noopener noreferrer"&gt;JavaScript Algorithms and Data Structures&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vscode</category>
      <category>webdev</category>
      <category>frontend</category>
      <category>react</category>
    </item>
    <item>
      <title>You don't need "Auto Rename Tag" extension anymore</title>
      <dc:creator>Maks Vozbraniuk</dc:creator>
      <pubDate>Wed, 14 Jun 2023 15:28:36 +0000</pubDate>
      <link>https://forem.com/vozmi/you-dont-need-auto-rename-tag-extension-anymore-1f86</link>
      <guid>https://forem.com/vozmi/you-dont-need-auto-rename-tag-extension-anymore-1f86</guid>
      <description>&lt;p&gt;"Auto Rename Tag" is a very popular extension for VS Code, having almost 14 million downloads. It is designed to make renaming paired HTML/XML tags easier. The extension is not only useful for HTML but also for JSX, which used in React.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnqqkes6qnss7gsx07a1a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnqqkes6qnss7gsx07a1a.png" alt="" width="545" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpe4vk9vp8o7semawrlpi.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpe4vk9vp8o7semawrlpi.gif" alt="" width="1440" height="938"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In version 1.79 VS Code introduced new feature &lt;a href="https://code.visualstudio.com/updates/v1_79#_linked-editing-for-jsx-tags" rel="noopener noreferrer"&gt;"Linked editing for JSX tags"&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;With linked editing, when you change an opening JSX tag VS Code will automatically update the corresponding closing tag. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So you don't need to use an extension to rename HTML tags. You can simply enable this feature in the VS Code settings.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The feature is off by default but can be enabled by setting:&lt;br&gt;
&lt;code&gt;"editor.linkedEditing": true&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;center&gt;
&lt;h4&gt;Resources&lt;/h4&gt;
&lt;a href="https://code.visualstudio.com/updates/v1_79" rel="noopener noreferrer"&gt;VS Code update 1.79&lt;/a&gt; &lt;br&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag" rel="noopener noreferrer"&gt;"Auto Rename Tag" VS Code Extension&lt;/a&gt;
&lt;/center&gt;

</description>
      <category>vscode</category>
      <category>webdev</category>
      <category>html</category>
      <category>react</category>
    </item>
  </channel>
</rss>
