关于正则表达式的

RegExp方法:test,exec,

String 方法:match,search,

全局 g



var str = "abababa";
var re = /a/g;
console.log(re.test(str)); console.log(re.lastIndex);
console.log(re.test(str)); console.log(re.lastIndex);
console.log(re.test(str)); console.log(re.lastIndex);
console.log(re.test(str)); console.log(re.lastIndex);
console.log(re.test(str)); console.log(re.lastIndex);
console.log(re.test(str)); console.log(re.lastIndex);


JavaScript:正则表达式 全局_hive



var str = "abababa";
var re = /a/g;
show(); show(); show(); show(); show(); show();
function show(){
console.log(re.lastIndex);
console.log(re.exec(str));
}


JavaScript:正则表达式 全局_hive_02

发现:全局不是一次性都全部匹配的

先匹配一个,再将下一次要开始匹配的索引放置在lastIndex中。

但是这样



var str = "uuuabababa";
var re = /a/g;
console.log(str.replace(re,'c'));


str中的a也全部替换成c了,why?

全局查找,有索引,有内容



function execAll(str, reg) {
var list = [];
var result = [];
while (result) {
result = reg.exec(str);
if (result) {
list.push(result);
}
}
return list;
}
String.prototype.execAll = function (reg) {
return execAll(this, reg);
}
var str = " hong da qi hong da ";
var list = str.execAll(/\s\b\w+\b/g);
console.dir(list);


JavaScript:正则表达式 全局_hive_03

哇,我好牛啊!

哈哈哈哈哈哈哈!

match



var res=str.match(/\s\b\w+\b/);
console.dir(res);


JavaScript:正则表达式 全局_html_04

没有索引

当不是全局时,match,exec



var str = " hong da qi hong da ";
var list =(/\s\b\w+\b/).exec(str);
console.dir(list);
var res=str.match(/\s\b\w+\b/);
console.dir(res);


JavaScript:正则表达式 全局_正则表达式_05

结果是一样的。