How to explain "$1,$2" in JavaScript when using regular expression?
You are misinterpreting that line of code. You should consider the string "$1,$2"
a format specifier that is used internally by the replace
function to know what to do. It uses the previously tested regular expression, which yielded 2 results (two parenthesized blocks), and reformats the results. $1
refers to the first match, $2
to the second one. The expected contents of the num
string is thus 11222,333
after this bit of code.
It's not a "variable" - it's a placeholder that is used in the .replace()
call. $n
represents the nth
capture group of the regular expression.
var num = "11222333";
// This regex captures the last 3 digits as capture group #2
// and all preceding digits as capture group #1
var re = /(\d+)(\d{3})/;
console.log(re.test(num));
// This replace call replaces the match of the regex (which happens
// to match everything) with the first capture group ($1) followed by
// a comma, followed by the second capture group ($2)
console.log(num.replace(re, "$1,$2"));
$1 is the first group from your regular expression, $2 is the second. Groups are defined by brackets, so your first group ($1) is whatever is matched by (\d+). You'll need to do some reading up on regular expressions to understand what that matches.
It is known that in Javascript, the name of variables should begin with letter or _, how can $1 be a valid name of member variable of RegExp here?
This isn't true. $ is a valid variable name as is $1. You can find this out just by trying it. See jQuery and numerous other frameworks.
It is known that in Javascript, the name of variables should begin with letter or _,
No, it's not. $1
is a perfectly valid variable. You have to assign to it first though:
$variable = "this is a test"
This is how jQuery users a variable called $
as an alias for the jQuery
object.