Regex Expressions in JS
JavaScript is a programming language that supports regular expressions (regex). A regular expression is a sequence of characters that specifies a search pattern. With regex, we can search and manipulate text data in a more efficient and flexible way. In this document, we will explore how to use regular expressions in JavaScript.
Flags:
- **g**: Global match. This flag indicates that the regular expression should match all occurrences in the input string, rather than just the first one.
- **i**: Case-insensitive match. This flag indicates that the regular expression should match regardless of the casing of the input string.
- **m**: Multiline match. This flag indicates that the regular expression should match across multiple lines of the input string.
Patterns:
- Matching any character: **.**
- Matching any digit: **\\d**
- Matching any non-digit: **\\D**
- Matching any whitespace character: **\\s**
- Matching any non-whitespace character: **\\S**
- Matching any word character: **\\w**
- Matching any non-word character: **\\W**
- Matching a specific number of characters: **{n}**
- Matching zero or more occurrences: ``
- Matching one or more occurrences: **+**
- Matching zero or one occurrence: **?**
- Matching the start of a string: **^**
- Matching the end of a string: **$**
- Matching a range of characters: **[abc]**
- Matching any character not in a range: **[^abc]**
- Matching any character in a range of characters: **[a-z]**
- Matching any character not in a range of characters: **[^a-z]**
- Matching any character except newline: **[\\s\\S]**
- Matching a specific character: **\**
- Matching a specific word boundary: **\\b**
- Matching a negative word boundary: **\\B**
- Capturing a group of characters: **( )**
- Non-capturing a group of characters: **(?: )**
- Matching one of several patterns: **(pattern1|pattern2|pattern3)**
- Using a backreference to match a previous captured group: **\\n**
- Matching any number of characters lazily: **?**
- Matching one or more characters lazily: **+?**
- Matching a specific number of characters lazily: **{n}?**
- Using lookahead to match a pattern only if it’s followed by another pattern: **(?= )**
- Using lookbehind to match a pattern only if it’s preceded by another pattern: **(?<= )**
// Matches all occurrences of the word "dog"  
const regex = /dog/g;  
// Matches the word "hello" regardless of case  
const regex = /hello/i;  
// Matches the pattern "cat" at the beginning of a string  
const regex = /^cat/;  
// Matches the pattern "bat" at the end of a string  
const regex = /bat$/;  
// Matches any vowel character  
const regex = /[aeiou]/;  
// Matches any non-vowel character  
const regex = /[^aeiou]/;  
// Matches either "cat" or "dog"  
const regex = /cat|dog/;  
// Groups together "hello" and "world" and captures the result  
const regex = /(hello) (world)/;
Most Used Regex Patterns
- Email addresses:
- **\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b**- this matches most standard email addresses and ensures that the domain name ends with at least two letters.
2. Phone numbers:
- **\\b\\d{3}[-.]?\\d{3}[-.]?\\d{4}\\b**- this matches most US phone numbers, with or without dashes or periods between groups of digits.
3. URLs:
- **(http(s)?://)?([\\w-]+\\.)+[\\w-]+(/[\\w- ;,./?%&=]*)?**- this matches most standard URLs, including those with or without the- **http://**or- **https://**prefixes, and with or without query parameters.
4. Postal codes:
- **[A-Z]\\d[A-Z] ?\\d[A-Z]\\d**- this matches most Canadian postal codes, which have the format A1A 1A1, with the first three characters being a letter, followed by a digit, followed by another letter, and then a space, and then a digit, followed by another letter, and then a digit.
5. IP addresses:
- **\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b**- this matches most standard IP addresses, with each group of digits separated by periods.
6. Dates:
- **\\b\\d{1,2}[\\/\\-]\\d{1,2}[\\/\\-]\\d{4}\\b**- this matches most standard date formats, with the month and day separated by either a slash or a dash, and the year consisting of four digits.
7. Credit card numbers:
- **\\b\\d{4}([ \\-]?\\d{4}){3}\\b**- this matches most standard credit card numbers, with groups of four digits separated by either spaces or dashes.
8. Social Security numbers:
- **\\b\\d{3}[ \\-]?\\d{2}[ \\-]?\\d{4}\\b**- this matches most standard SSN formats, with groups of three, two, and four digits separated by either spaces or dashes.
9. File paths:
- **^[A-Za-z]:[\\\\/].***- this matches most standard file paths on Windows systems, with the drive letter followed by a colon, and then the rest of the path separated by either backslashes or forward slashes.
Creating a Regex Object
In JavaScript, we can create a regex object using the RegExp constructor or by using a regex literal. Here is an example:
// Using RegExp constructor  
let regex1 = new RegExp('hello');  
console.log(regex1.test('hello world')); // true  
// Using regex literal  
let regex2 = /hello/;  
console.log(regex2.test('world hello')); // true
Matching a Pattern
To match a pattern in a string, we can use the match method. This method returns an array of matches or null if no matches are found. Here is an example:
let str = 'The quick brown fox jumps over the lazy dog';  
let regex = /the/gi;  
let matches = str.match(regex);  
console.log(matches); // ["The", "the"]
In this example, we used the g and i flags to match all occurrences of the word "the" in a case-insensitive way.
Replacing a Pattern
To replace a pattern in a string, we can use the replace method. This method returns a new string with the replaced value. Here is an example:
let str = 'JavaScript is a popular programming language';  
let regex = /JavaScript/;  
let newStr = str.replace(regex, 'JS');  
console.log(newStr); // "JS is a popular programming language"
In this example, we used the replace method to replace the word "JavaScript" with "JS" in the string.
Conclusion
Regular expressions are a powerful tool in JavaScript for searching and manipulating text data. We can create regex objects using the RegExp constructor or regex literals. We can match a pattern using the match method and replace a pattern using the replace method. With regular expressions, we can write more efficient and flexible code.