Can anyone tells me why does't the second snippet catchs the
'groups' when use g
flag ?
"123".match(/(\d{1})(\d{1})/) // returns ["12", "1", "2"]
"123".match(/(\d{1})(\d{1})/g) // returns ["12"] (where's 1 and 2
?)
data-lang="js" data-hide="true" data-console="true"
data-babel="false">
console.log("123".match(/(\d{1})(\d{1})/)) //
returns ["12", "1",
"2"]
console.log("123".match(/(\d{1})(\d{1})/g)) // returns ["12"]
(where's 1 and 2
?)
As per href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/match#Description"
rel="nofollow noreferrer">MDN docs
:
If the regular
expression does not include the g flag, returns the same result as RegExp.exec(). The
returned Array has an extra input property, which contains the original string that was
parsed. In addition, it has an index property, which represents the zero-based index of
the match in the string.
If the regular
expression includes the g flag, the method returns an Array containing all matched
substrings rather than match objects. Captured groups are not returned. If there were no
matches, the method returns
null.
/>
If you want to obtain
capture groups and the global flag is set, you need to use href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec"
rel="nofollow noreferrer">RegExp.exec()
instead.
class="snippet" data-lang="js" data-hide="false" data-console="true"
data-babel="false">
class="snippet-code-js lang-js prettyprint-override">
var myRe =
/(\d)(\d)/g;
var str = '12 34';
var
myArray;
while (myArray = myRe.exec(str)) {
console.log(myArray);
}
No comments:
Post a Comment