无法理解javascript String.match(regexp)方法的行为

时间:2012-01-30 18:56:20

标签: javascript regex string-matching

我有下一个JS代码:

var str = 'some string';
var rexp = /^([^#]+)/;
var matchArr = str.match(rexp);
然后

matchArr包含两个项matchArr [0] ='some string'和 matchArr [1] ='some string';而我期待阵列只有一个项目。

我无法理解这种行为。当我删除括号时,matchArr只包含一个匹配项。为什么会这样,有人可以解释吗?

1 个答案:

答案 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";