坚持是你能够掌握的最重要的技能!
1. 正则表达式(Regular Expression)的作用:
匹配字符串
2. 正则表达式的组成:
元字符 / 限定符
3. MDN web技术文档之正则表达式:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
4. 元字符:
. 除了\n以外的任意的一个字符;
[] 范围,另一个含义: 把正则表达式中元字符的意义干掉 [.] 就是一个.
[0-9] 0到9之间的任意的一个数字
[a-z] 所有的小写的字母中的任意的一个
[A-Z] 所有的大写的字母中的任意的一个
[a-zA-Z] 所有的字母的任意的一个
[0-9a-zA-Z] 所有的数字或者是字母中的一个
| 或者
[0-9]|[a-z] 表示的是要么是一个数字,要么是一个小写的字母
() 分组 提升优先级
([0-9])([1-5])([a-z]) 三组, 从最左边开始计算
* 前面的表达式出现了0次到多次
[a-z][0-9]* 小写字母中的任意一个 后面是要么是没有数字的,要么是多个数字的
"fdsfs3223323" [a-z][0-9]*
+ 前面的表达式出现了1次到多次
[a-z][9]+ 小写字母一个,后面最少一个9或者多个9
"fesfewww9fefds"
? 前面的表达式出现了0次到1次,最少是0次,最多1次,另一个含义:阻止贪婪模式(不常用)
[4][a-z]? "1231234ij"
{} 更加的明确前面的表达式出现的次数
{0,} 表示的是前面的表达式出现了0次到多次,和 *一样的
{1,} 表示的是前面的表达式出现了1次到多次,和 +一样的
{0,1} 表示的是前面的表达式出现了0次到1次,和 ?一样的
{5,10} 表示的是前面的表达式出现了5次到10次
{4} 前面的表达式出现了4次
{,10} 错误的========不能这么写
^ 以什么开始,或者是取非(取反)
^[0-9] 以数字开头
^[a-z] 以小写字母开始
[^0-9] 取反,非数字 ^写在括号里面就是取反
[^a-z] 非小写字母
[^0-9a-zA-Z_] 非数字非小写字母非大写字母非_
^[0-9][a-z] 相当于是严格模式 "3f2432e" (一个数字开头,后面就要紧接字母)
$ 以什么结束
[0-9][a-z]$ 必须以小写字母结束,相当于是严格模式 "3f2432e" (最后一个是小写字母结尾,前面是数字)
\d 数字中的任意一个
\D 非数字中的一个
\s 空白符中的一个
\S 非空白符
\w 非特殊符号 匹配字母或数字或下划线
\W 特殊符号 等价于 [^0-9a-zA-Z_]
\b 单词的边界
5. 经验:
找规律; 不要追求完美 。6. 身份证的正则表达式:(15位或者18位)
([1-9][0-9]{14}) | ([1-9][0-9]{16}[0-9xX]) (没有对出生年月日进行精细匹配,这就是所谓的不要追求完美)
第二种写法 ([1-9][0-9]{14})([0-9]{2}[0-9xX])?
7. 邮箱的正则表达式:(必须要记住的)
sd4545_4.-fg@itcdse.com.cn
[0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-zA-Z]+){1,2}
8. 创建正则表达式对象
构造函数创建对象
//对象创建完毕,也可以写成new RegExp("\\d{5}");正则表达式是可以放在字符串里面写的,不过不推荐
var reg = new RegExp(/\d{5}/);
//调用方法验证字符串是否匹配
var flag = reg.test("我的电话是10086");
//输出 true
console.log(flag);
字面量方式创建对象(这种方式简洁一点)
//字面量方式
var reg = /\d{5}/;
var flag = reg.test("我的电话是10086");
//输出 true
console.log(flag);
9. 识别正则表达式是否匹配
/.?/.test("哈哈哈哈"); //true ( 这又不是严格模式 )/b | (ara)/.test("abra"); //true (b或者ara)
10. 醍醐灌顶之真言
对于位置的理解,我们可以理解成空字符
11. 判断文本框输入的是不是邮箱 (严格模式)
^ [0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-zA-Z]+){1,2}$12. 其他
g 表示全局模式匹配
match 方法: 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回
RegExp.$1是RegExp的一个属性,指的是与正则表达式匹配的第一个 子匹配(以括号为标志)字符串
var str="中国移动:10086,中国联通:10010,中国电信:10000";
//把里面所有的数字全部显示出来
var array=str.match(/\d{5}/g);
console.log(array); //输出 [10086,10010,10000]
//提取这里的日
var str="2017-11-12";
var array=str.match(/(\d{4})[-](\d{2})[-](\d{2})/g);
//console.log(array);
//正则表达式对象.$3
console.log(RegExp.$3); // 输出12
var email="shuaiyangtaishuaile@itcast.com.cn";
email.match(/([0-9a-zA-Z_.-]+)[@]([0-9a-zA-Z_-]+)(([.][a-zA-Z]+){1,2})/);
console.log(RegExp.$1);//用户名
console.log(RegExp.$2);//126
console.log(RegExp.$3);//域名
replace 替换
var str="小苏好帅哦,真的是太帅了,帅,就是真帅";
str=str.replace(/帅/g,"猥琐");
console.log(str); //帅字全部替换为猥琐
trim 把字符串两边的空白都去掉(只是两边,中间的空白去不掉)
replace(/\s+/g,"") 这个就能把所有空白符都去掉
var str=" 哦买噶的 ,太幸福了 ";
str=str.trim();
console.log("==="+str+"===");
var str = " 哦买噶的 ,太幸福了 ";
str = str.replace(/\s+/g, "");
console.log("===" + str + "===");
i 表示忽略大小写
exec 方法
var str = "中国移动:10086,中国联通:10010,中国电信:10000";
var reg=/\d{5}/g;
//通过正则表达式匹配这个字符串
var array=reg.exec(str);
while (array!=null){
//输出匹配的内容
console.log(array[0]); // 10086 10010 10000
array=reg.exec(str);
}
===========================================================================
"JavaScript 正则表达式迷你书--老姚" 读书笔记
1. 正则表达式字符匹配攻略
惰性匹配 ,就是尽可能少的匹配
var regex = /\d{2,5}?/g;
var string = "123 1234 12345 123456";
console.log( string.match(regex) );
// => ["12", "12", "34", "12", "34", "12", "34", "56"]
其中 /\d{2,5}?/ 表示,虽然 2 到 5 次都行,当 2 个就够的时候,就不再往下尝试了
通过在量词后面加个问号就能实现惰性匹配,因此所有惰性匹配情形如下:
2. 正则表达式位置匹配攻略
把 字符 串 的 开 头 和 结 尾 用 "#" 替 换 ( 位置可以替换成字符的! )var result = "hello".replace(/^|$/g, '#');
console.log(result);
// => "#hello#"
多行匹配模式(即有修饰符 m)时,二者是行的概念,这一点需要我们注意
var result = "I\nlove\njavascript".replace(/^|$/gm, '#');
console.log(result);
/*
#I#
#love#
#javascript#
*/
(?=p)
,其中
p
是一个子
模
式,
即
p
前面的
位置
,或者说,该
位置
后面的
字符要匹配
p 正向先行断言
比如 (?=l),表示 "l" 字符前面的位置,例如:
var result = "hello".replace(/(?=l)/g, '#');
console.log(result);
// => "he#l#lo"
而 (?!p) 就是 (?=p) 的反面意思,比如: 负向先行断言
var result = "hello".replace(/(?!l)/g, '#');
console.log(result);
// => "#h#ell#o#"
对于位置的理解,我们可以理解成空字符 ""
写个正则不匹配任何东西 /.^/
var result = "12345678".replace(/(?=(\d{3})+$)/g, ',')
console.log(result);
// => "12,345,678"