正则表达式 RegExp
补充:
- 转义字符 “/”
- 多行字符串 var test = "\ \ \ "
- 字符串换行符 \n
- 正则表达式的作用:
匹配特殊字符或有特殊搭配原则的字符的最佳选择。
两种创建方式:
- 直接量
var reg = /规则/;
var str = '...';
reg.test(str); //查看str中是否含有reg
- new RegExp();
var reg = new RegExp("规则","属性");
属性:i 、 g、 m
var reg = /ab/i; // ignoreCase,忽视大小写
var reg1 = /ab/g; // global 全局匹配
var reg2 = /ab/m; // 执行多行匹配
var str = 'abababab';
str.match(reg); // return ['ab']
str.match(reg1); //return ['ab','ab','ab','ab']
var reg3 = /^a/g; // a是开头 ^开头 $结尾
var reg4 = /^a/gm;
var str1 ='abbabab\nab';
str1.match(reg3); //return ['a']
str1.match(reg4); //return ['a','a']
区别
var reg = /abdc/;
var reg1 = new RegExp(reg); //reg 和 reg1 值相同,但不是同一个
var reg2 = RegExp(reg); // reg 和 reg2 是同一个
表达式 (贪婪匹配原则)
[] 方括号内表示这一位的范围
(red|green|blue) 或
var reg = /[1234567890][1234567890][1234567890]/g;
var str = '258445sefs24e36gs54445e';
str.match(reg); //return ['258','445','544']
[0-9]、[a-z]、 [A-Z]、[A-z]
[^] ^放在表达式([])中,表示非
元字符 (和表达式是一个东西)
-
\w (word ) \w === [0-9A-z_]
-
\W \W === [^\w]
-
\d === [0-9]
-
\D === [^\d]
-
\s === [\n\t\v\f\r ] (换行符,制表符,垂直制表符,换页符,回车符,空格)
-
\S === [^\s]
-
\b 单词边界
-
\B 非单词边界
-
. === [^\r\n]
量词
n+ //匹配1~无穷个 {1, }
n* //匹配0~无穷个 {0, }
n? //匹配0个或一个 {0,1}
n{X} //匹配X个 {X}
n{x,y} // {x,y}
n{x,} //{x, }
var reg = /\w+/g;
var str = 'ackls';
str.match(reg); // "[ackls]"
var reg = /\w*/g;
str.match(reg); // "[ackls,""]"
var reg = /^\d | \d$/;
var str = "44sefsg";
reg.test(str);
属性
- ignoreCase
- global
方法
表达式的方法
- test
- exec !!
var reg = /ab/g;
var str = 'abababab';
console.log(reg.lastIndex); //0
console.log(reg.exec(str)); // ["ab",index: 0, input: "abababab", groups: undefined]
console.log(reg.lastIndex); //2
console.log(reg.exec(str)); // ["ab",index: 2, input: "abababab", groups: undefined]
console.log(reg.lastIndex); //4
console.log(reg.exec(str)); // ["ab",index: 4, input: "abababab", groups: undefined]
reg.lastIndex = 0;
console.log(reg.lastIndex); //0
console.log(reg.exec(str)); // ["ab",index: 0, input: "abababab", groups: undefined]
console.log(reg.lastIndex); //2
- 子表达式
var reg = /(\w)\1(\w)\2/g;
var str = 'aabbddee'; //匹配aabb式
var reg1 = /(/w)\1\1\1/g;
var str1 = 'aaaabbbb'; //匹配aaaa式
字符串的方法
- match
- serch //返回第一个匹配到的索引位,没有则返回-1
- split
- replace !!
var str = 'aa';
console.log(str.replace('a','b')); // 'ba'
var reg = /a/;
console.log(str.replace(reg,'b')); // 'ba'
var reg1 = /a/g;
console.log(str.replace(reg1,'b')); // 'bb'
var reg = /(\w)\1(\w)\2/g;
var str = 'aabb';
console.log(str.replace(reg, "$2$2$1$1"));
// 或者
console.log(str.replace(reg, function($, $1, $2){
return $2 + $2 + $1 + $1;
}))
- toUpperCase 变大写
- toLowCase 变小写
var reg = /-(\w)/g;
var str = 'the-first-name';
console.log(str.replace(reg,function($, $1){
return $1.toUpperCase();
}));
- 正向预查/断言
var str = 'abaaaa';
// 要求找到后面是b的a
var reg = /a(?=b)/g;
// 要求找到后面不是b的a
var reg = /a(!=b)/g;
var str = '10000000000';
var reg = /(?=(\B)(\d{3})+$)/g;
console.log(str.replace(reg,'.'));