JavaScript:正则表达式 全局
关于正则表达式的
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);
结果是一样的。
http://www.iteye.com/topic/481228
http://blog.csdn.net/lxcnn/article/details/4304651
http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html