【问题标题】:Can't understand the behavior of javascript String.match(regexp) method无法理解 javascript String.match(regexp) 方法的行为
【发布时间】:2012-01-30 18:56:19
【问题描述】:
我有下一个 JS 代码:
var str = 'some string';
var rexp = /^([^#]+)/;
var matchArr = str.match(rexp);
matchArr 然后包含两个项目 matchArr[0] = 'some string' 和
matchArr[1] = '一些字符串';而我期望数组只有一项。
我无法理解这种行为。当我删除括号时, matchArr 只包含一个匹配项。为什么会发生这种情况,有人可以解释一下吗?
【问题讨论】:
标签:
javascript
regex
string-matching
【解决方案1】:
当您在正则表达式中使用捕获括号时,它会在返回的结果数组中添加一个项目以用于整体匹配和每组捕获括号。
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";