案例一: (match的用法)

var regex = /ab/;
var string = "ababa abbb ababab";
console.log( string.match(regex) );
["ab", index: 0, input: "ababa abbb ababab", groups: undefined]
var regex = /(ab)/;
var string = "ababa abbb ababab";
console.log( string.match(regex) );
["ab", "ab", index: 0, input: "ababa abbb ababab", groups: undefined]
总结: (match)

1. 非全局匹配
首先说明一下,数组元素的索引是从0开始的。
1).0个元素是匹配结果。
2).1个元素是第一个引用型分组匹配的子字符串。
3).2个元素存放的是第二个引用型分组匹配的子字符串,依次类推。
返回的数组对象同时具有两个属性:
1).index:返回匹配的子字符串起始字符在stringObject源字符串中的位置。
2).input:返回stringObject源字符串。

2. 全局匹配
与非全局匹配的区别:
1).不具有index和input属性。
2).不具有引用型分组匹配的子字符串,数组元素仅包含匹配的所有子字符串。

案例二: (分组后面有量词的话,分组最终捕获到的数据是最后一次的匹配)

var regex = /(\d)+/;
var string = "12345";
console.log( string.match(regex) );
["12345", "5", index: 0, input: "12345"]
var regex = /(ab)+/;
var string = "ababa abbb ababab";
console.log( string.match(regex) );
["abab", "ab", index: 0, input: "ababa abbb ababab", groups: undefined]

string.replace(regex,"#")
"#a abbb ababab"
var regex = /(ab)+/g;
var string = "ababa abbb ababab";
console.log( string.match(regex) )


string.replace(regex, '#')
"#a #bb #"

总结: 分组后面有量词的话,分组最终捕获到的数据是最后一次的匹配. 仅仅针对 分组捕获的数据,而匹配的内容还是正常的。

非捕获括号 (只想要括号最原始的功能,但不会引用它)

var regex = /(?:ab)/
var string = "ababa abbb ababab";
console.log( string.match(regex) );
["ab", index: 0, input: "ababa abbb ababab", groups: undefined]



var regex = /(?:ab)+/
var string = "ababa abbb ababab";
console.log( string.match(regex) );
["abab", index: 0, input: "ababa abbb ababab", groups: undefined]
var regex = /(?:ab)/g
var string = "ababa abbb ababab";
console.log( string.match(regex) );
["ab", "ab", "ab", "ab", "ab", "ab"]


var regex = /(?:ab)+/g
var string = "ababa abbb ababab";
console.log( string.match(regex) );
["abab", "ab", "ababab"]

从表现形式上 和 /(ab)+/ 一样,只不过是非捕获的写法 
12-18 11:27