Open In App

JavaScript RegExp s Modifier

Last Updated : 07 Dec, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

The s modifier (also known as the "dotall" modifier) in JavaScript regular expressions allows the dot (.) metacharacter to match newline characters (\n) as well. Without the s modifier, the dot (.) matches any character except line breaks

JavaScript
let regex = /a.b/s;
let s = `a
b`;

console.log(regex.test(s)); 

Output
true
  • Regular Expression: We define a regular expression /a.b/s. The a is matched by the letter "a", the '.' is matched by any character (including newline), and b is matched by the letter "b".
  • Test String: The string we are testing contains "a" followed by a newline character and then "b".
  • Test: When we call regex.test(str), the regular expression successfully matches because the dot (.) can now match the newline between "a" and "b" due to the s modifier.

Syntax

let regex = /pattern/s;
  • pattern: The regular expression pattern that can use the s modifier to enable dot (.) to match line breaks.
  • s: The modifier that changes the behaviour of the dot (.) to match newline characters.

Real-World Use Cases of the s Modifier

1. Matching Multi-Line Strings

If you have a string that spans multiple lines, and you need to match a pattern that includes line breaks, the s modifier is ideal.

JavaScript
let regex = /start.*end/s;
let s = `start
middle
end`;

console.log(regex.test(s));

Output
true

In this case, the pattern start.*end matches "start", followed by any characters (including line breaks), and finally "end".

2. Handling Text Blocks with Line Breaks

When parsing text with multiple lines (such as a block of HTML, a code block, or a formatted document), the 's' modifier lets you treat the text as a single continuous string.

JavaScript
let regex = /<div>.*<\/div>/s;
let html = `<div>
<p>Hello</p>
</div>`;

console.log(regex.test(html));

Output
true

The regular expression matches the <div> tag and everything inside it, including line breaks.

3. Extracting Data from Multi-Line Logs

When dealing with logs or multi-line content, you might need to extract patterns that span multiple lines. The s modifier helps in this case.

JavaScript
let regex = /ERROR.*stack trace/s;
let data = `INFO: Everything is fine.
ERROR: Something went wrong
stack trace: at ...`;

console.log(regex.test(data));

Output
true

Here, the ERROR.*stack trace pattern matches an error message that spans multiple lines.

4. Matching HTML Tags with Content Inside

The s modifier is also helpful for matching HTML tags that contain content with line breaks inside.

JavaScript
let regex = /<p>.*<\/p>/s;
let s = `<p>This is a paragraph.
It spans multiple lines.</p>`;

console.log(regex.test(s));

Output
true

This matches a <p> tag with content that spans across multiple lines, thanks to the s modifier.

Key Points to Remember

  • The s modifier allows the dot (.) in regular expressions to match newline characters (\n), which it does not do by default.
  • It's particularly useful when you need to match patterns that span multiple lines or when your string includes line breaks.
  • The s modifier is essential for parsing multi-line text, such as HTML or logs, where content might be spread across different lines.
  • It makes working with text that includes line breaks much easier by eliminating the need to explicitly handle line breaks in the regular expression pattern.

Next Article

Similar Reads