Question
In the regex below, \s
denotes a space character. I imagine the regex
parser, is going through the string and sees \
and knows that the next
character is special.
But this is not the case as double escapes are required.
Why is this?
var res = new RegExp('(\\s|^)' + foo).test(moo);
Is there a concrete example of how a single escape could be mis-interpreted as something else?
Answer
You are constructing the regular expression by passing a string to the RegExp constructor.
\
is an escape character in string literals.
The \
is consumed by the string literal parsing…
const foo = "foo";
const string = '(\s|^)' + foo;
console.log(string);
… so the data you pass to the RegEx compiler is a plain s
and not \s
.
You need to escape the \
to express the \
as data instead of being an
escape character itself.