我有下一个JS代码:
var str = 'some string';
var rexp = /^([^#]+)/;
var matchArr = str.match(rexp);
然后matchArr包含两个项matchArr [0] ='some string'和 matchArr [1] ='some string';而我期待阵列只有一个项目。
我无法理解这种行为。当我删除括号时,matchArr只包含一个匹配项。为什么会这样,有人可以解释吗?
答案 0 :(得分:2)
当您在正则表达式中使用捕获括号时,它会在返回的结果数组中为整个匹配和每组捕获括号添加一个项。
matchArr[0]
是匹配的所有内容。
matchArr[1]
与第一组捕获括号中的匹配
matchArr[2]
在第二组捕获括号中匹配
等等
因此,在您的正则表达式/^([^#]+)/
中,matchArr[0]
和matchArr[1]
之间没有区别,因为匹配的所有内容都在捕获括号中。
如果你这样做了:
var str = 'some string';
var rexp = /^some([^#]+)/;
var matchArr = str.match(rexp);
你会发现:
matchArr[0] == "some string";
matchArr[1] == " string";
因为匹配的某些部分不在捕获括号中。
或者如果你这样做:
var str = 'some string';
var rexp = /^(some)([^#]+)/;
var matchArr = str.match(rexp);
你会发现:
matchArr[0] == "some string";
matchArr[1] == "some"
matchArr[2] == " string";