1、字符的艺术,正则表达式,引擎,DFA Deterministic finite automaton 确定型有穷自动机 不支持回溯、不支持捕获组 NFA Non-deterministic finite automaton 非确定型有穷自动机 分为 传统型NFA和POSIX NFA,引擎,JS的正则表达式属于哪一种?,“nfa not“.match(/nfa|nfa not/); 结果:“nfa“,为数字添加逗号分隔符,number: 1239492813.098,number: 1,239,492,813.098,为数字添加逗号分隔符,为数字添加逗号分隔符,第二种办法,为数字添加逗号分隔符,第
2、三种办法,/B(?=(?:d3)+b)/,var str = number: 123498679823145.342; str.replace(/B(?=(?:d3)+b)/g, ,),基础概念,基础概念,匹配位置: 【】 【$】【b】【B】 【环视(零宽断言)】,匹配位置 - 示例,abcd.replace(/b/g, |) 结果: “|abcd|“ abcd.replace(/g, |) 结果: “|abcd“ abcd.replace(/$/g, |) 结果: “abcd|“ abcd.replace(/B/g, |) 结果: “a|b|c|d“,基础概念,匹配字符: 【d】【D】【w】
3、【W】 【s】【S】 【.】 【n】【r】【t】,如何匹配所有字符,sS dD wW,基础概念 - 字符匹配,var re = /0d2-d8/; re.exec(010-66668888);,String.prototype.trim = function() return this.replace(/(su3000*)|(su3000*$)/g, “); ;,示例:,量词,贪婪(优先)量词: 【n,m】【*】【+】【?】惰性(忽略优先)量词: 【?】【*?】【+?】【m,n?】支配: 【?+】【*+】【+】【n+】【 n,m+】【n,+】,原理,回溯,目标字符串“3456” 正则“d+(d
4、d)”,量词 - 示例,“aatest1bbtest2cc“.match(/.*?/); 结果:“test1“ “aatest1bbtest2cc“.match(/.*/); 结果:“test1bbtest2“acd.match(/ab?cd/) 结果:“acd“ abcd.match(/ab?c/) 结果:“abc“,环视 (零宽断言),顺序肯定环视 (?=Expression) 顺序否定环视 (?!Expression)逆序肯定环视 (?=Expression) 逆序否定环视 (?!Expression),环视 - 示例,ab.match(/(?=a)b/);,结果:null,ab.rep
5、lace(/(?=a)/, |); 结果:“|ab“,环视 - 为数字添加逗号分隔符,number: 1239492813.098/B(?=(?:d3)+b)/number: 1,239,492,813.098,匹配分解,一. 边界 number:12345609.234.replace(/B/g, |); 结果:“n|u|m|b|e|r:1|2|3|4|5|6|0|9.2|3|4“ 二.数字 number:12345609.234.match(/(?:d3)+b/); 结果:“345609“ 三.位置 number:12345609.234.replace(/(?=(?:d3)+b)/g, |); 结果:“number:12|345|609.234“,环视 - 匹配标签,var str = aaonebbtwocc; str.match(/+/g); 结果:“, “/(?=.8,$)(?=.*d)(?=.*W+)(?=.*A-Z)(?=.*a-z)(?!.*n).*$/ 必须是8位以上、必须出现数字、必须出现特殊符号(非字母数字下划数)、必须出现大写字母、必须出现小写字母、不得出现换行。,/p 或者 p,谢谢大家!,