关于正则表达式的
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);
var str = "abababa";
var re = /a/g;
show(); show(); show(); show(); show(); show();
function show(){
console.log(re.lastIndex);
console.log(re.exec(str));
}
发现:全局不是一次性都全部匹配的
先匹配一个,再将下一次要开始匹配的索引放置在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);
哇,我好牛啊!
哈哈哈哈哈哈哈!
match
var res=str.match(/\s\b\w+\b/);
console.dir(res);
没有索引
当不是全局时,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);
结果是一样的。