"No" it is not the same. It has an important difference if you are not using the single line
flag (meaning that .
does not match all).
The [\s\S]
comes handy when you want to do mix of matches when the .
does not match all.
It is easier to explain it with an example. Suppose you want to capture whatever is between a
and b
, so you can use pattern a(.*?)b
(?
is for ungreedy matches and parentheses for capturing the content), but if there are new lines suppose you don't want to capture this in the same group, so you can have another regex like a([\s\S]*?)b
.
Therefore if we create one pattern using both approaches it results in:
a(.*)b|a([\s\S]*?)b
In this case, if you see the scenario in regex101, then you will have a colorful and easy way to differentiate the scenarios (in green capturing group #1 and in red capturing group #2):
So, in conclusion, the [\s\S]
is a regex trick when you want to match multiple lines and the .
does not suit your needs. It basically depends on your use case.
However, if you use the single line
flag where .
matches new lines, then you don't need the regex trick, below you can see that all is green and group 2 (red above) is not matched:
Have also created a javascript performance test and it impacts in the performance around 25%:
https://jsperf.com/ss-vs-dot
[\s\S]
like constructs also do not act the same way in POSIX and non-POSIX based regex engines. – Comus[\s\S]
is concerned). – Comus