StatusCake

Visual Studio 2019+ Regex Features

statuscake

Whether you’ve never heard of regex before, or use it in your code all the time, one thing is almost certain…it is not that easy to read! Case in point:

/^#?([a-f0-9]{6}|[a-f0-9]{3})$/

Thankfully the Visual Studio team at Microsoft have included several handy features inside the code editor to help using regex a little less painful. But first let’s quickly cover,

What is Regex?

Just in case the term is new to you, regex is a portmanteau of regular + expression. Regex is a set of characters that defines a specific search pattern in text, programmers will traditionally use regex to look for specific data patterns in strings.

For example, say I had some code that was reading a stream of data from a .txt file and the only data I want to save from this text file are GUID’s. To accomplish this, we can write a very simple and understandable piece of regex to match the standardised format of a GUID (xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx):

.{8}-.{4}-.{4}-.{4}-.{12}

This regex is made up of three components:

  • The period token  .  matches any single character 
  • The number in curly braces  {8}  represents how many reoccurring  .  ‘s to capture 
  • The hyphen   is not a regex token it will  just match a hyphen character exactly

In the screenshot below you can see it in action:

Regex patterns can range from very simple to very complex, you can learn more about Regex and test your own patterns here

Ok, on to the features!

Visual Studio Regex Features

Visual Studio Settings

First things first, you’ll want to make sure the following settings are enabled in your editor (they should be by default).

Regex colour formatting

Visual studio makes regex string patterns easier to distinguish by colourising all the groups, quantifiers, comments, etc.

Regex Options

You can pass in an optional RegexOptions parameter when initialising a new Regex().

Note: The regex colouriser won’t work until any errors on the line are resolved. Just in case you were wondering about the screenshot above.

A few examples of regex options would be:

RegexOptions.IgnoreCase : Use case-insensitive matching. By default, the casing conventions of the current culture are used.

RegexOptions .IgnorePatternWhitespace : Exclude unescaped white space from the pattern, and enable comments after a number sign (#).

RegexOptions .ECMAScript : Instructs the regex engine to behave like the ECMASCript/JavaScript regex engine.

Built-in Regex autocompletion

IntelliSense can assist you when writing your regex patterns. The autocomplete dropdown works inside the pattern string and is helpful to discover the syntax or description of how the tokens operate.

Catching Pattern Errors

To avoid you getting runtime errors, Visual Studio reports errors contained in the pattern in real-time as you code, and gives you advise on how you can fix it:

Highlighted backreferences

Sometimes it can be difficult to see the referenced group for a backreference in your pattern. Visual Studio helps you out here by highlighting both parts of the backreference for you, making it super clear.

Conclusion

I hope you’ve found this slightly shorter post useful. Regex can be an incredibly powerful tool when used correctly, and I’d like to cover it in more detail at a later date, so keep your eyes peeled! 

Share this

More from StatusCake

Designing Alerts for Action

3 min read In the first two posts of this series, we explored how alert noise emerges from design decisions, and why notification lists fail to create accountability when responsibility is unclear. There’s a deeper issue underneath both of those problems. Many alerting systems are designed without being clear about the outcome they’re meant to produce. When teams

A Notification List Is Not a Team

3 min read In the previous post, we looked at how alert noise is rarely accidental. It’s usually the result of sensible decisions layered over time, until responsibility becomes diffuse and response slows. One of the most persistent assumptions behind this pattern is simple. If enough people are notified, someone will take responsibility. After more than fourteen years

Alert Noise Isn’t an Accident — It’s a Design Decision

3 min read In a previous post, The Incident Checklist: Reducing Cognitive Load When It Matters Most, we explored how incidents stop being purely technical problems and become human ones. These are moments where decision-making under pressure and cognitive load matter more than perfect root cause analysis. When systems don’t support people clearly in those moments, teams compensate.

The Incident Checklist: Reducing Cognitive Load When It Matters Most

4 min read In the previous post, we looked at what happens after detection; when incidents stop being purely technical problems and become human ones, with cognitive load as the real constraint. This post assumes that context. The question here is simpler and more practical. What actually helps teams think clearly and act well once things are already

When Things Go Wrong, Systems Should Help Humans — Not Fight Them

3 min read In the previous post, we explored how AI accelerates delivery and compresses the time between change and user impact. As velocity increases, knowing that something has gone wrong before users do becomes a critical capability. But detection is only the beginning. Once alerts fire and dashboards light up, humans still have to interpret what’s happening,

When AI Speeds Up Change, Knowing First Becomes the Constraint

5 min read In a recent post, I argued that AI doesn’t fix weak engineering processes; rather it amplifies them. Strong review practices, clear ownership, and solid fundamentals still matter just as much when code is AI-assisted as when it’s not. That post sparked a follow-up question in the comments that’s worth sitting with: With AI speeding things

Want to know how much website downtime costs, and the impact it can have on your business?

Find out everything you need to know in our new uptime monitoring whitepaper 2021

*By providing your email address, you agree to our privacy policy and to receive marketing communications from StatusCake.