js正则表达式中的小括号(),其貌不扬。是个啥作用呢?
我们来个简单的匹配下字符串'abc'
var str = 'abc';
var reg = /[\w][\w][\w]/g;
reg.test(str);//true
此时,如果有个要求,将 'abc' 替换成 ‘bca’,咋整呢?
()括号的作用就显现出来了,它可以在正则表达式中精确筛选出想要的部分。
例子一
将字符串 'abc' 替换成 ‘bca’
var str = 'abc';
var reg = /([\w])([\w])([\w])/g;
console.log(str.replace(reg,'$2$3$1'));//'bca'
没错,这里replace第二个参数中的 $1 $2 $3 匹配到的正是 reg 中三个小括号对应的内容。reg用小括号括几个,在replace第二个参数就能对应获得几个。是不是很方便啊
例子二
匹配出‘aabb’的形式(就是在重复的两字母 ‘aabbccddeeff’ 等等什么的中找到 aabb、ccdd、eeff 筛选出重复两对做一组)
var str = 'aaccffddkkmmzz';
var reg = /([\w])\1([\w])\2/g;
console.log(str.match(reg)); //['aacc', 'ffdd', 'kkmm']
在正则表达式中 \1代表第一个括号中的内容,\2代表第二个括号中的内容。
例子三
将字符串 'java-script-is-not-simple' 替换成 'javaScriptIsNotSimple' (驼峰式)。
var str = 'java-script-is-not-simple';
var reg = /-([\w])/g;
var newStr = str.replace(reg,function($,$1){
return $1.toUpperCase();
})
console.log(newStr); //javaScriptIsNotSimple
replace 的第二个参数可以是一个匿名函数。这个匿名函数的参数很有意思。第一个参数是匹配到的整体,第二个参数是我们今天的主角就是正则表达式对应括号里面的内容。如果正则表达式有两括号,那么匿名函数的参数可以对应多几个。
总结
在正则表达式中使用括号,目的是为了匹配到结果之后方便找到对应的匹配结果。1.在正则表达式本身中用 \1,\2,\3... ...的形式找到。2.在replace第二个参数中用 '$1 $2 $3'的形式找到。3.当replace函数的第二个参数是匿名函数的时候,从这个匿名函数的第二参数开始找到。
在此顺嘴提一句replace
replace的第二个参数是匿名函数的时候,这个函数参数的含义是function(‘正则匹配到的所有’,第一个括号,第二个括号,第三个括号等等, 每次括号匹配到的位置){ }具体内容在此就不过多赘述。