• 正则表达式总结


    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title></title>
    </head>
    <body>
    	<script>
    
    		/*
    		 * 元字符
    		 */
    
    		// 字符串里的本身是特殊字符,如果要用,需要转义
    		var str1 = "He is a boy, is he?";
    		var regexp = new RegExp('\bis\b', 'g');
    
    		console.log(str1.replace(/is/, 'IS'));
    		console.log(str1.replace(/is/g, 'IS'));
    		console.log(str1.replace(/is/i, 'IS'));
    		console.log(str1.replace(regexp, "IS"));
    
    		var str2 = "@123
    @456
    @789";
    		console.log(str2.replace(/^@./gm, 'A'));
    
    
    		/*
    		 * 构建类[abc], one of abc
    		 */
    		var str3 = "abcdefgABCDEFG123456";
    		console.log(str3.replace(/[abc]/g, 'B'));
    
    		/*
    		 * 反向类[^abc], none of abc
    		 */
    		console.log(str3.replace(/[^abc]/g, 'C'));
    
    		/*
    		 * 范围类[a-z] [A-Z] [0-9]
    		 */
    		console.log(str3.replace(/[a-z]/g, 'D'));
    		console.log(str3.replace(/[a-zA-Z]/g, 'E'));
    		console.log(str3.replace(/[a-zA-Z0-9]/g, 'F'));
    
    		/*
    		 * 预定义类
    		 * .等价与 [^
    ]
    		 * d等价于[0-9]
    		 * D等价于[^0-9]
    		 * s等价于[^	
    x0Bf
    ] ,即空白符
    		 * S等价于[	
    x0Bf
    ] ,即非空白符
    		 * w等价于[a-zA-Z_0-9], 即字母,数字,下划线
    		 * W等价于[^a-zA-Z_0-9], 即非字母,非数字,非下划线
    		 */
    		var str3 = "abcdefgABCDEFG123456";
    		var str4 = "      xxx    ";
    		var str5 = "123abcDEF_$%^&*(";
    		console.log(str3.replace(/./g, 'G'));
    		console.log(str3.replace(/d/g, 'H'));
    		console.log(str3.replace(/D/g, 'I'));
    		console.log(str4.replace(/s/g, 'J'));
    		console.log(str4.replace(/S/g, 'K'));
    		console.log(str5.replace(/w/g, 'L'));
    		console.log(str5.replace(/W/g, 'M'));
    
    		/*
    		 * 边界字符
    		 * ^以什么开始
    		 * $以什么结束
    		 * 单词边界
    		 * B非单词边界
    		 */
    		var str6 = "@123@456@";
    		var str7 = "This is a boy";
    		var str8 = "ab123456hhh";
    		console.log(str6.replace(/^@/, 'N')); // 以@开头的转为'L'
    		console.log(str6.replace(/^@./, 'O')); // 以@开头且紧跟后的任意字符 ,将它们转为'L'
    		console.log(str6.replace(/^@[0-9]/, 'P')); // 以@开头且紧跟后的数字,将它们转为'L'
    		console.log(str6.replace(/@$/, 'Q'));  // 将最后的一个@转为L
    		console.log(str7.replace(/is/, 'IS'));  
    		console.log(str7.replace(/Bis/, 'IS'));  
    
    		// ab+数字+任意字符 
    		console.log(str8.replace(/ab[0-9][^
    ]/g, 'R'));
    		console.log(str8.replace(/abd./g, 'S'));
    
    		/*
    		 * 量词, 表示数量的词
    		 * ? 表示最多一次
    		 * + 表示至少一次
    		 * * 表示任意次
    		 * {n} 表示n次
    		 * {n,m} 表示n到m次, 注意没有空格
    		 * {n, } 表示至少n次
    		 */
    		var str9 = "123456789";
    		console.log(str9.replace(/d?/, 'T'));
    		console.log(str9.replace(/d+/, 'U'))
    		console.log(str9.replace(/d*/, 'V'));
    		console.log(str9.replace(/d{3}/, 'W'));
    		console.log(str9.replace(/d{3,5}/, 'X')); //注意没有空格
    		console.log(str9.replace(/d{2,}/, 'Y')); //注意没有空格
    
    		/*
    		 * 正则表达式有贪婪模式
    		 * 就像上面量词匹配那样
    		 * 它会尽可能匹配多的,比如{3,}表示至少3次,如果超过3次,那么它会多的去匹配
    		 * 所以上面最后一个是将str9所有的数字换成了Y
    		 *
    		 */
    
    
    		/*
    		 * 正则表达式非贪婪模式
    		 * 那么如何让正则表达式到非贪婪模式呢?
    		 * 在量词后面加上一个问号即可
    		 *
    		 */
    		console.log(str9.replace(/d{2,}?/, 'Z')); //注意没有空格, 匹配出来只有2次
    
    		/*
    		 * 分组
    		 * 比如匹配iloveyou出现多次的场景怎么办?
    		 * 引入分组,用()包起来
    		 * 那么量词将会作用于分组
    		 * 
    		 * 或
    		 * 使用|
    		 *
    		 */
    		var str10 = "ByronByronByron";
    		var str12 = "iloveyouihateyou";
    		console.log(str10.replace(/(Byron){2}/, 'A'));
    		console.log(str12.replace(/i(love|hate)you/g, 'memeda'));
    
    
    		/*
    		 * 反向引用
    		 * 如果要将2015-02-15变为15/02/2015该怎么办呢?
    		 * 那么就会用到反向引用了。
    		 * 每个分组即()都会捕获中间的数据
    		 * 用$1 $2 $3来取得捕获的数据
    		 *
    		 * 那么如何忽略分组呢?
    		 * 即不希望捕获分组, 只要在分组内部加上?: 
    		 *
    		 */
    		var str11 = "2016-04-21";
    		console.log(str11.replace(/(d{4})-(d{2})-(d{2})/, '$3/$2/$1'));
    		console.log(str11.replace(/(?:d{4})-(d{2})-(d{2})/, '$1-$2'));
    
    		/*
    		 * 前瞻后顾
    		 * 前瞻也就是所谓的断言
    		 * 后顾的话,JavaScript不支持
    		 * 语法:
    		 * 正向前瞻:exp(?=assert)
    		 * 负向前瞻:exp(?!assert)
    		 * 正向后瞻:exp(?<=assert)
    		 * 负向后瞻:exp(?<!assert)
    		 *
    		 */
    		var str12 = "a2*3";
    		var str13 = "a2*34v8";
    		console.log(str12.replace(/w(?=d)/g, 'A')); // 注意,只是匹配w,后面的那个只是规则,并不会被替换
    		console.log(str13.replace(/w(?=d)/g, 'B'));  
    		console.log(str13.replace(/w(?!d)/g, 'C'));
    
    	</script>
    </body>
    </html>
    
  • 相关阅读:
    sysstat_iostat
    MSM_linux_x64_installer15.11.0013
    Error detected while processing /root/.vimrc: E492: Not an editor command: Plug 'scrooloose/nerdtree'
    ERROR 2006 (HY000): MySQL server has gone away
    内网时间服务器chrony
    lsof在脚本中无法被识别
    virbr0默认地址192.168.122.1冲突
    01 springcloud 版本的说明和各版本依赖如何引入工程
    关于vmodel绑定未定义的对象属性的几个细节验证
    DM8备份与还原实操
  • 原文地址:https://www.cnblogs.com/yzfdjzwl/p/6636128.html
Copyright © 2020-2023  润新知