正则冷知识;分组捕获、replace()的用法...
1.var reg=/./; var reg=/\./的区别??
前者代表任意一个字符,后者代表这个字符串中得有一个.。
2.?的使用??
如果单独的一个字符串后面带? ,
var reg=/\d?/ ; /n?/ ; d?代表的意思是至少有0个和1个数字 ; n ? 代表0个或1个带n的字符 。
如果是量词+和x ,n{x}后带? 则会取消正则的贪婪性
var reg=/\d+?/ ;
var st="123hello"
console.log(reg.exec(st))
3.捕获
(1)普通捕获 exec() match()
普通捕获有懒惰性,给正则添加一个修饰符g可以解决,match()是将所有捕获的内容放在一个数组中并返回,match()就是对exec()的封装
(2)分组捕获 exec() match()
var reg=/(a)(b)/;
exec()和match()在非全局捕获下捕获到的是一样的,不仅捕获到大正则的内容,也捕获到分组内容;
exec()和match()在全局捕获下捕获到的是不一样的,exec()捕获到的是大正则和小分组,而match()捕获到的只有大正则
(3)分组捕获的优势 ???
a:可以提升优先级 b:可以捕获引用
\1代表与分组1中一样的内容 \2代表与分组2中一样的内容
分组的结果存在正则类RegExp的$number的属性下
\1与RegExp.$1都是分组引用
\1只能在正则表达式中使用,RegExp.$1可以在外面使用,且二者都是在捕获完成的条件下使用
(4)在捕获过程中怎样取消捕获分组中的内容???
在那个分组前加?:
var reg=/a(?:b)/;
var st="ab";
console.log(reg.exec(st))
4.replace()字符串的方法,用于替换,两个参数,第一个参数是被替换的,第二个参数是替换他的,返回值是替换它的新字符串,但是并没有改变原来的字符串
(1)如果第一个值是字符串的话,只改变一次;
(2)如果第一个值是正则的话,捕获一次改变一次;
(3)如果第二个参数是匿名函数,每捕获一次这个匿名函数都会执行一次,return的是什么,就替换成什么,这个匿名函数的arguments有三个元素 a:被替换的元素;b:索引; c:原字符串