概念:正则表达式:用一些特殊符号(字符)代表一些特定的内容,用来查找与匹配符合规则的字符串.
一 正则表达式的定义:
1 直接定义 /正则表达是内容/[修饰符] 推荐使用 eg:var reg=/\d/g
2 对象定义 var reg=new RegExp(字符串,修饰符)
二转义字符
\d 数字
\D 非数字
\s 空格
\S 非空格
\w 数字、字母、下划线
\W 非数字、非字母、非下划线
\b 单词的边界,独立的部分(起始位置、结束位置、空格)
\B 非边界的部分
. 任意一个字符
\. 真正的点
三量词
+ {1,} 至少重复1次,最多不限
? {0,1} 至少重复0次,最多重复1次
* {0,} 至少重复0次,最多不限
{n,} 至少重复n次,最多不限
{n,m} 至少重复n次,最多重复m次
| 或者 eg: a|b
^ 匹配开始
$ 匹配结束
[ ] 匹配中括号中的任意一个字符,只代表一个字符 [1-9] 1-9之间的任意一个字符 [a-z] a-z之间的任意一个字母 [A-Z] A-Z之间任意一个字母
[^1-2] 取反 排除数字1,2
四 匹配中文
[\u4e00-\u9fa5] 任意一个汉字
五 方法
1 test
查看正则与指定的字符串是否匹配
语法: 正则.test("字符串")
返回值: true 成功
false 失败
1 var str="xubj"; 2 console.log(/b/.test(str)); // true 3 console.log(/bao/.test(str)); // false
2 search 找匹配的字符串首次出现的位置
字符串.search(字符串或者/正则/)
返回值:
找到 返回下标
未找到 返回-1
var str="nihaoxubj"; console.log(str.search("i"));// 1 返回下标 console.log(str.search(/\d/g));//-1 未找到返回-1
3 match 匹配字符串或者正则,把匹配到的结果放入数组中
语法 字符串.match(字符串或者正则)
返回值:
找到 返回找到的结果数组
未找到 null
var str="xubjsdsfdsxubjsd25"; console.log(str.match(/xubj/)); // ["xubj", index: 0, input: "xubjsdsfdsxubjsd25"] console.log(str.match(/xubj/g)); // ["xubj", "xubj"] console.log(str.match(/z/)); // null
4 replace 替换匹配到的字符串
语法 字符串.replace(字符串或者正则,字符串或者函数)
返回值: 替换后的新字符串,原字符串不变
注意:第二个参数是函数的话一定要有返回值,否则会用undefined替换原来的内容
var str="xubj"; console.log(str.replace(/x/,0)); // 0ubj 返回变化的字符串 console.log(str); // xubj 原字符串不变 var newStr=str.replace(/x/,function(){ return ‘f‘; }); console.log(newStr);// fubj var newStr1=str.replace(/x/,function($0,$1,$2){ console.log($0,$1,$2);//x 0 xubj /* 参数1 要匹配的内容,与replace的第一个参数一样 参数2 匹配内容对应的位置下标 参数3 原字符串 */ }); // 例子 把字符串中的x变成 * var str="xubjnihaoxubj"; var newStr2=str.replace(/xu/g,function($0,$1,$2){ var str=""; for(var i=0;i<$0.length;i++){ str+="*"; } return str; }); console.log(newStr2); // **bjnihao**bj
二 分组与子项
分组 用()
子项 放在小括号里的内容,每一个小括号可以看作是一个子项
Replace方法匹配子项
参数从第二个开始,就对应每一个子项
// replace方法匹配子项 var reg=/(\d+)(-)/g; var str="2017-12-08"; var newStr=str.replace(reg,function($0,$1,$2){ //console.log($0);// 2017- 12- 跟正则里的内容一样(要匹配的内容) // console.log($1); // 2017 12 第一个分组中的内容 // console.log($2); // - -第二个分组中的内容 return $1+‘/‘; }); console.log(newStr); // 2017/12/08
Match 方法匹配子项
有g 返回的数组里没有子项
没有g 返回的数组里有子项
//match方法匹配子项 var str="xubj"; console.log(str.match(/(xu)(b)(j)/)); //["xubj", "xu", "b", "j"]没有g 返回子项 console.log(str.match(/(xu)(b)(j)/g));//["xubj"] 有g 不返回子项
//格式化日期 var d1="2017-12-08"; var d2="2017+++12++++08"; var d3="2017////12//08"; var d4="2017+---12+++-08"; //解释 一堆数字一堆非数字一堆数字一堆非数字一堆数字 var reg=/(\d+)\D+(\d+)\D+(\d+)/; var newStr=d1.replace(reg,function($0,$1,$2,$3){ //$1,$2,$3代表分组中的子项 return $1+‘年‘+$2+‘月‘+$3+‘日‘; });