案例一: (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)+/ 一样,只不过是非捕获的写法