RegExp
百度云资料
密码:
f89c
里面有详细的语法跟例子,希望对大家有帮助.
课前补充
- 转义字符 “\”
- 多行字符串
- 字符串换行符\n
RegExp作用
- 匹配特殊字符或有特殊搭配原则的字符的最佳选择。
创建方式
- 直接量(推荐)
- new RegExp();
var str = "abc\\def";
// 直接量
var reg = /abc/i;
// i 是忽略大小写
var Str = "ABCDe";
// 创建的第二种方式
var regg = new RegExp("abc","igm");
// RegExp() 要是这个参数放进去的本身是正则表达式,
// 那么它是相同的规则,但是不是同一个引用
var reg1 = RegExp(reg);
var reg2 = new RegExp(reg);
// reg1 跟 reg 是同一个,他们指向同一个地址
// reg2 内容跟这个 reg是一样的, 但是他们不是指向同一个地址
i g m 修饰符
1. i 执行对大小写不敏感的匹配。
2. g 执行全局匹配查找所有匹配而非在找到第一个匹配后停止
3. 执行多行匹配
方法
1. reg.test(str);
判断str字符串是不是包含这个reg片段
2. str.match(reg)
把匹配的reg串给返回
方括号(表达式)
1. [abc] 查找方括号之间的任何字符
2. [^abc] 查找任何不在方括号之间的字符
3. [0-9] 0到9数字
4. [a-z] 查找任何从小写 a 到小写 z 的字符
5. (red|blue|green) 查找任何指定的选项
也就是不是当个字符,可能是个字符串
元字符(具有特殊意义的字符)
1. \w等于[0-9A-z_]也是代表一位(world)
2. \W等于[^\w] 表示的\w的非
3. \d等于[0-9] \D等于[^\d]
4. \s元字符用于查找空白符(空格符 制表符 回车符 换行符 垂直换行符 换页符) \S 查找非空白字符 \s === [\t\n\r\v\f ]
5. \b 匹配单词边界 \B 匹配非单词边界
6. . === [^\r\n]
量词
1. n+ 匹配任何包含至少一个 n 的字符串 {1,}
2. n* 匹配任何包含零个或多个 n 的字符串 {0,}
3. n? {0,1}
4. n{x} 表示的就是三个
5. n{x,y} 表示的是x到y个
6. n{x,} 表示就是x到无限个
7. n& 匹配任何结尾为 n 的字符串
8. ^n 匹配任何开头为 n 的字符串
9. ?=n 匹配任何其后紧接指定字符串 n 的字符串
10. ?!=n 匹配任何其后没有紧接指定字符串 n 的字符串
RegExp对象上面的属性
1. global global 属性来检测正则表达式是否具有标志 g
2. ignoreCase RegExp 对象是否具有标志 i
3. lastIndex 一个整数,标示开始下一次匹配的字符位置
4. multiline 属性用于返回正则表达式是否具有标志 m
5. source 正则表达式的源文本
RegExp 方法
1. exec 检索字符串中指定的值 返回找到的值 并确定其位置
2. compile 编译正则表达式
3. test 检索字符串中指定的值。返回 true 或 false
支持正则表达式的 String 对象的方法
1. search 检索与正则表达式相匹配的值
2. match 找到一个或多个正则表达式的匹配
3. replace 替换与正则表达式匹配的子串
4. split 把字符串分割为字符串数组
拓展() 子表达式
var reg4 = /(\w)\1(\w)\2/g;
// () 这个整体叫做是子表达式
// 上面自然而言就是有两个子表达式
//
// \数字表示的意思就是copy一份前面的值
var str4 = "aabb";
console.log(str4.match(reg4));
console.log(reg4.exec(str4));
非贪婪匹配
- 再量词后面加个问号
var str = "aaaaaa";
var reg = /a{1,3}?/g;
var ans = str.match(reg);
replace
// 匹配xxyy形式,然后换成yyxx
var reg3 = /(\w)\1(\w)\2/g;
var str3 = "aabbccdd";
// var tmp = str3.match(reg3);
var ans = str3.replace(reg3,"$2$2$1$1"); //bbaa
// var anss = str3.replace(reg3,function(arr,$1,$2){
// // console.log("arr内容:"+arr);
// console.log($2);
// return $2 + $2 + $1 + $1;
// });
// the-first-name
// theFirstName
var reg5 = /-(\w)/g;
var str = "the-first-name";
var ans1 = str.replace(reg5,function ($,$1){
// 这个方法调用的次数取决于匹配了多少次就调用多少次
// $1 表示的就是第一个子表达式的内容
return $1.toUpperCase();
});
实现千位分隔符
var str = '1234567890';
var f = str.replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,');
console.log(f);
解释:
正则表达式 \d{1,3}(?=(\d{3})+$) 表示前面有1~3个数字,后面的至少由一组3个数字结尾。
?=表示正向引用,可以作为匹配的条件,但匹配到的内容不获取,并且作为下一次查询的开始。
$& 表示与正则表达式相匹配的内容,具体的使用可以查看字符串replace()方法的
// 正向预查 正向断言
var str4 = "aba!aa";
var reg44 = /a(?=b)/g;
//表示的是a后面要是b,但是这个b不参加最后结果
console.log(str4.match(reg44));
var f = '1234567890'.replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,');
console.log(f);
// 结果:1,234,567,890