001--自找麻烦之 正则表达式

坚持是你能够掌握的最重要的技能!

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] 表示的是要么是一个数字,要么是一个小写的字母

        () 分组 提升优先级

扫描二维码关注公众号,回复: 879318 查看本文章

            ([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. 邮箱的正则表达式:(必须要记住的)

        [email protected]        

        [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="[email protected]";
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"



   










猜你喜欢

转载自blog.csdn.net/m0_37291785/article/details/79998445