RegExp对象的实例方法
lastIndex:是pattern.lastIndex,匹配到的位置的下一个位置;之所有在null之后多匹配一次出现匹配结果是由于出现null值之后,lastIndex的值清0
<script>
//如果不加g进行非全局匹配时,无论console匹配多少遍,匹配到的都是第一个
str = "js js js";
pattern = /js/g;
//如果此时进行全局匹配,而且次数是4,返回的结果为:
//['js'](index:0),['js'](index:3),['js'](index:6),null
console.log(pattern.exec(str));
console.log(pattern.exec(str));
console.log(pattern.exec(str));
console.log(pattern.exec(str));
//但是如果多加一次匹配,结果就有意思了
//此时返回的结果为['js'](index:0),['js'](index:3),['js'](index:6),null,['js'](index:0)
//console.log(pattern.exec(str));
</script>
<script>
//返回的值是3组['js','j'](index:0),['js','j'](index:0),['js','j'](index:0)
str = "js js js";
pattern = /(j)s/;
console.log(pattern.exec(str));
console.log(pattern.exec(str));
console.log(pattern.exec(str));
</script>
<script>
//如果在上面的基础上加了全局匹配
//返回的值是3组['js','j'](index:0),['js','j'](index:3),['js','j'](index:6)
str = "js js js";
pattern = /(j)s/g;
console.log(pattern.exec(str));
console.log(pattern.exec(str));
console.log(pattern.exec(str));
</script>
//对于上述的一次只找得到一个,那么如何将所有的值一次性返回呢
```css
<script>
var str = '1.js 2.js 3.js';
var pattern = /js/g;
var total = 0,
match = '',
result;
while((result = pattern .exec(str)) != null){
total++;
match+= '第' + total + '个匹配到的是:' + result[0] + ';' + '它的位置是:' + result.index + '\n';
}
match += '共找到' + total + '处匹配\n';
//弹出的结果是
//第1个匹配到的是:js;它的位置是:2
//第2个匹配到的是:js;它的位置是:7
//第3个匹配到的是:js;它的位置是:12
//共找到3处匹配
console.log(match);
</script>
<script>
var pattern = new RegExp('a\\nb');
//toString()的意思是将其转换成字符,转换的是转义之后的
//输出结果是/a\nb/
console.log(pattern.toString());
//输出的是本地特色语言
console.log(pattern.toLocaleString());
//pattern.valueOf()返回的是正则它本身;
//source返回的是里面字面量的值,这里返回的是 a\nb
console.log(pattern.source);
//input 返回的是str里面的字符串,也可用$代替
</script>
<script>
var str = 'js js js';
var pattern = /js/;
pattern.exec(str);
//注意input返回的是str里面的值,也可以用 $_ 代替
//只有当其进行了匹配,传入input时才有值返回
//console.log(RegExp.input);
console.log(RegExp.$_);
//这是上述的另一种写法
console.log(RegExp['$_']);
//lastMatch是最新一次匹配到的值,这里的是js
console.log(RegExp.lastMatch);
//他也有简写
console.log(['$&']);
//leftContent是匹配之后剩余的字符,由于是第一个开始匹配的,所以左边剩余的为null
//右边剩余的rightContent;是js js
console.log(RegExp.leftContext);
//他的简写是console.log(['$`']);
console.log(RegExp.rightContext);
//他的简写是console.log(['`$']);
//之前获取数组的方法是\1\2;而函数直接获取的方法是$1
console.log(RegExp.$1);
</script>
string对象中与正则相关的方法之 search , match ,和split;
<script>
var str = 'html js';
//输出的结果是5,也可以var pattern了之后直接用pattern找
//如果找不到返回的是-1,全局匹配不影响其值
console.log(str.search('js'));
</script>
<script>
var str = 'js js js';
var pattern = /js/g;
//返回值是 ["js", "js", "js"]
console.log(str.match(pattern));
//match:非全局的情况下才会返回分组中匹配到的内容,全局的情况下会返回所有匹配到的字符
//而exec 无论是否全局匹配,返回到的值都是返回当前匹配到的内容,而不是全部
</script>
<script>
//m只有当其有尾匹配时才能体现出其作用
var str = '1.js\n2.js\n3.js\n';
var pattern = /js$/mg;
//如果没有m会默认的当做一行,而在尾匹配和全局匹配的作用下,只会匹配到一个js
console.log(str);
//返回的值是 ["js", "js", "js"]
console.log(str.match(pattern));
</script>
<script>
//当时普通的字符串方法时
//var str = 'html,css,js';
//console.log(str.split(','));
//当用正则的方法时
var str = 'html ,css ,js';
var pattern = /\s*,\s*/g;
console.log(str.split(pattern));
</script>
强大的replace
<script>
//当用普通的方法替换时
//var str = 'I love js js';
//console.log(str.replace('js','html'));
//当使用正则的方法时
var str = 'I love js js';
var pattern = /js/g;
//输出的结果是 I love html html
console.log(str.replace(pattern,'html'));
</script>
当进一步更强大的不仅替换了而且样式也给其修改
<script>
var str = 'I love js js';
var pattern = /(js)/g;
document.write(str.replace(pattern,'<strong style = "color:red">$1</strong>'))
</script>
<script>
//敏感词过滤
var str = '中guojun队和abian一起banzheng';
var pattern = /guojun|abian|banzheng/g;
//有几个敏感字符就用几个*来代替
//$0是匹配到的内容,guojun,abian和banzheng
//返回值是:中**队和**一起**
console.log(str.replace(pattern,function($0){
var result = '';
for(var i = 0 ;i < $0.length;i++){
result += '*';
}
return result;
}))
</script>