Home Web Front-end JS Tutorial Detailed explanation of grouping in javascript regular expressions

Detailed explanation of grouping in javascript regular expressions

Jan 20, 2017 pm 01:47 PM

I wrote an article about getting started with regular expressions before. I thought I had a relatively good understanding of regular expressions, but today I encountered another pitfall. Maybe it’s because I’m not careful enough. Today I’ll focus on sharing javascript with you. Grouping in regular expressions. If you don’t understand JS regular expressions enough, you can click here to learn more.

Grouping is widely used in regular expressions. The grouping I understand is a pair of brackets (). Each pair of brackets represents a grouping.

Grouping can Divided into:

Capturing grouping

Non-capturing grouping

Capturing grouping

Capturing grouping will be used in, for example, match exec In the function, the corresponding grouped results are obtained in the form of the second item and the third item. Let’s look at an example first

var reg = /test(\d+)/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
//["test001", "001", index: 4, input: "new test001 test002"]
Copy after login

(\d+) in the code is a group (some people also call it a sub-pattern), but it all means the same meaning. The above example Test001 is the exact match result,
However, the group matching is to find the characters matching the sub-pattern \d+ from the entire exact match result (that is, test001), which is obviously 001.

But The situation I encountered today is like this

var reg = /test(\d)+/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
//["test001", "1", index: 4, input: "new test001 test002"]
Copy after login

The difference is that (\d+) is changed to (\d)+, the entire matching result is still test001, but the first group matching result But different.

Let’s analyze their differences slowly

(\d+) This is a grouping situation, because by default the matching mode is greedy mode, which means that as much as possible To match more
all \d+, the matched result is 001 and then a pair of brackets are added outside, which is a group, so the matched result in the first group is 001.

Let’s look at the second one (\d)+ in the example is also a greedy pattern. It will first match 0, then 0, and then match 1 at the end. It will also match until the end of the match.

It seems There is no difference from the matching in the first example, but the grouping (\d) here means matching a single number.

According to my previous understanding, it will match the first matched result, which is 0 But this understanding is wrong. Since the entire matching is a greedy mode, matching as many (\d) in the

group as possible will capture the last matched result 1

If it is a non-greedy mode, then It will match as few as possible

var reg = /test(\d)+?/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
 
//["test001", "0", index: 4, input: "new test001 test002"]
Copy after login

so that the (\d) matching result is 0. Although there are still matching results later, here is as few as possible Match

Non-capturing grouping

var reg = /test(?:\d)+/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
//["test001", index: 4, input: "new test001 test002"]
Copy after login

Non-capturing grouping means that a pair of parentheses is needed in some places, but you don’t want it to become a capturing grouping. I just don’t want this group to be obtained by functions like macth exec

Usually add ?: in front of the brackets, that is, (?:pattern), so that it becomes a non-capturing group,

In this way, the grouped matching content will not appear in the match result, that is, the second item 1 is missing.

This article focuses on (\d+) and (\d) The difference between + is also the pitfall I stepped into today. If there are any mistakes, please correct me.

For more detailed explanations of grouping in javascript regular expressions, please pay attention to the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How do I create and publish my own JavaScript libraries? How do I create and publish my own JavaScript libraries? Mar 18, 2025 pm 03:12 PM

Article discusses creating, publishing, and maintaining JavaScript libraries, focusing on planning, development, testing, documentation, and promotion strategies.

How do I optimize JavaScript code for performance in the browser? How do I optimize JavaScript code for performance in the browser? Mar 18, 2025 pm 03:14 PM

The article discusses strategies for optimizing JavaScript performance in browsers, focusing on reducing execution time and minimizing impact on page load speed.

What should I do if I encounter garbled code printing for front-end thermal paper receipts? What should I do if I encounter garbled code printing for front-end thermal paper receipts? Apr 04, 2025 pm 02:42 PM

Frequently Asked Questions and Solutions for Front-end Thermal Paper Ticket Printing In Front-end Development, Ticket Printing is a common requirement. However, many developers are implementing...

How do I debug JavaScript code effectively using browser developer tools? How do I debug JavaScript code effectively using browser developer tools? Mar 18, 2025 pm 03:16 PM

The article discusses effective JavaScript debugging using browser developer tools, focusing on setting breakpoints, using the console, and analyzing performance.

How do I use source maps to debug minified JavaScript code? How do I use source maps to debug minified JavaScript code? Mar 18, 2025 pm 03:17 PM

The article explains how to use source maps to debug minified JavaScript by mapping it back to the original code. It discusses enabling source maps, setting breakpoints, and using tools like Chrome DevTools and Webpack.

Getting Started With Chart.js: Pie, Doughnut, and Bubble Charts Getting Started With Chart.js: Pie, Doughnut, and Bubble Charts Mar 15, 2025 am 09:19 AM

This tutorial will explain how to create pie, ring, and bubble charts using Chart.js. Previously, we have learned four chart types of Chart.js: line chart and bar chart (tutorial 2), as well as radar chart and polar region chart (tutorial 3). Create pie and ring charts Pie charts and ring charts are ideal for showing the proportions of a whole that is divided into different parts. For example, a pie chart can be used to show the percentage of male lions, female lions and young lions in a safari, or the percentage of votes that different candidates receive in the election. Pie charts are only suitable for comparing single parameters or datasets. It should be noted that the pie chart cannot draw entities with zero value because the angle of the fan in the pie chart depends on the numerical size of the data point. This means any entity with zero proportion

Who gets paid more Python or JavaScript? Who gets paid more Python or JavaScript? Apr 04, 2025 am 12:09 AM

There is no absolute salary for Python and JavaScript developers, depending on skills and industry needs. 1. Python may be paid more in data science and machine learning. 2. JavaScript has great demand in front-end and full-stack development, and its salary is also considerable. 3. Influencing factors include experience, geographical location, company size and specific skills.

TypeScript for Beginners, Part 2: Basic Data Types TypeScript for Beginners, Part 2: Basic Data Types Mar 19, 2025 am 09:10 AM

Once you have mastered the entry-level TypeScript tutorial, you should be able to write your own code in an IDE that supports TypeScript and compile it into JavaScript. This tutorial will dive into various data types in TypeScript. JavaScript has seven data types: Null, Undefined, Boolean, Number, String, Symbol (introduced by ES6) and Object. TypeScript defines more types on this basis, and this tutorial will cover all of them in detail. Null data type Like JavaScript, null in TypeScript

See all articles