任何人都可以告诉我为什么第二个片段在使用g旗帜时没有捕获'组' ?
"123".match(/(\d{1})(\d{1})/) // returns ["12", "1", "2"]
"123".match(/(\d{1})(\d{1})/g) // returns ["12"] (where's 1 and 2 ?)
Run Code Online (Sandbox Code Playgroud)
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 ?)Run Code Online (Sandbox Code Playgroud)
Pra*_*lan 12
根据MDN文档:
如果正则表达式不包含g标志,则返回与RegExp.exec()相同的结果.返回的Array有一个额外的input属性,它包含已解析的原始字符串.此外,它还有一个index属性,表示字符串中匹配的从零开始的索引.
如果正则表达式包含g标志,则该方法返回包含所有匹配的子字符串而不是匹配对象的Array.捕获的组不会被退回.如果没有匹配项,则该方法返回null.
如果要获取捕获组并设置全局标志,则需要使用RegExp.exec().
var myRe = /(\d)(\d)/g;
var str = '12 34';
var myArray;
while (myArray = myRe.exec(str)) {
console.log(myArray);
}Run Code Online (Sandbox Code Playgroud)