JavaScript的中的test和match,结果你不敢相信

大家看下代码,这个test和match还是晕了我很久的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var __parsers = [];
__parsers.push({'regExp':/.*one.*/g});
__parsers.push({'regExp':/.*two.*/g});
__parsers.push({'regExp':/.*three.*/g});
__parsers.push({'regExp':/.*four.*/g});
__parsers.push({'regExp':/.*five.*/g});
__parsers.push({'regExp':/.*six.*/g});
__parsers.push({'regExp':/.*seven.*/g});
__parsers.push({'regExp':/.*eight.*/g});

var matchParser = function(subject){
for (var i = 0; i < __parsers.length; i++) {
// console.log('RegExp:',__parsers[i].regExp);
if(subject.match(__parsers[i].regExp)){
return __parsers[i];
}
}
throw new Error('No Match');
}

var testParser = function(subject){
for (var i = 0; i < __parsers.length; i++) {
// console.log('RegExp:',__parsers[i].regExp);
if (__parsers[i].regExp.test(subject)) {
return __parsers[i];
}
}
throw new Error('No Match');
}

简单的测试代码就这些。我们用一个循环来执行。

//第一种测试

1
2
3
4
5
6
7
8
for(var i=0;i<5;i++){
var subject = 'two';
try{
console.log(testParser(subject));
}catch(err){
console.log(err.message);
}
}

//结果

1
2
3
4
5
{ regExp: /.*two.*/g }
No Match
{ regExp: /.*two.*/g }
No Match
{ regExp: /.*two.*/g }

看吧,还是有没有匹配到的吧。罪过啊。

//第二种测试

1
2
3
4
5
6
7
8
for(var i=0;i<5;i++){
var subject = 'two';
try{
console.log(matchParser(subject));
}catch(err){
console.log(err.message);
}
}

//结果

1
2
3
4
5
{ regExp: /.*two.*/g }
{ regExp: /.*two.*/g }
{ regExp: /.*two.*/g }
{ regExp: /.*two.*/g }
{ regExp: /.*two.*/g }

你们看,是不是瞬间很开心啊。

可以使用nodejs执行整理执行一下。被坑了的感觉有木有啊!

可以看出来,使用match的全部匹配出来了,为什么,给你一个可想的空间吧。match完胜啊。