转义
概念:转换意义,改变意义
转义符号:
转义字符: 字符 (注意:只能能在编辑器上使用,而不能在文本中使用,即在html标签中不可使用)
特殊转义字符:
(a)
: 换行符
(b)
: 回车符
(c) : 制表符(四个字符)
1 var str1 = "我是一名'牛逼'的程序员"; 2 console.log(str1); // 我是一名'牛逼'的程序员 3 var str2 = "我是一名"牛逼"的程序员"; 4 console.log(str2); // error 5 var str3 = "我是一名"牛逼"的程序员"; 6 console.log(str3); //我是一名"牛逼"的程序员 7 var str4 = "我是一名\牛逼\的程序员"; 8 console.log(str4); // 我是一名牛逼的程序员 9 10 11 var str1 = '<h1>字符串1</h1>' + 12 '<h2>字符串2</h2>' + 13 '<h3>字符串3</h3>'; 14 15 var str2 = '<h1>字符串1</h1> 16 <h2>字符串2</h2> 17 <h3>字符串3</h3>'; 18 19 console.log(str1); // <h1>字符串1</h1><h2>字符串2</h2><h3>字符串3</h3> 20 console.log(str2); // <h1>字符串1</h1> <h2>字符串2</h2> <h3>字符串3</h3>
正则(RegExp regular expression)
概念:检索数据中符合要求正则要求的数据
公式:var reg = new RegExp(正则表达式,属性/修饰符)
正则属性(修饰符):
‘g': global 全局匹配
'i': ignore case 不区分大小写
'm': multi-line 多行匹配
1 // 第一种写法 2 var str = 'This is a test. Test is important'; 3 4 var reg1 = new RegExp('Test', 'g'); 5 6 console.log(reg1.test(str)); // true 7 console.log(str.match(reg1)); // ['Test'] 8 9 var reg2 = new RegExp('Test', 'gi'); 10 11 console.log(reg2.test(str)); // true 12 console.log(str.match(reg2)); // ['test', 'Test'] 13 14 var reg3 = new RegExp('Test', 'gim'); 15 16 console.log(reg3.test(str)); // true 17 console.log(str.match(reg3)); // ['test', 'Test'] 18 19 // 第二种写法 20 21 var str = 'This is a test. Test is important'; 22 23 var reg1 = /Test/g; 24 25 console.log(reg1.test(str)); // true 26 console.log(str.match(reg1)); // ['Test'] 27 28 var reg2 = /Test/gi; 29 30 console.log(reg2.test(str)); // true 31 console.log(str.match(reg2)); // ['test', 'Test'] 32 33 var reg3 = /Test/gim; 34 35 console.log(reg3.test(str)); // true 36 console.log(str.match(reg3)); // ['test', 'Test']
正则初级使用
1 // 1: 匹配成功过后的不会重复匹配,没有匹配成功的会重复匹配 2 var str = '1032kdsjfsdhj123sdfsdf', 3 reg = /[1234567890][1234567890][1234567890]/g; 4 5 console.log(str.match(reg)); // ['103', '123'] 6 7 // 2: 匹配区间 8 var str = 'sdfsdfsfs231Fssfd-sdfsd', 9 reg = /[0-9][A-Z][a-z]/g; 10 console.log(str.match(reg)); // ['1Fs'] 11 12 13 // 3: 多个区间取或,(注意:[A-Za-z]等价[A-z],大写字母一定要放到前面,小写字母一定要放到后面,否则会报错) 14 var str = 'sdfsdfsfs231Fssfd-sdfsd', 15 reg1 = /[0-9A-Za-z][A-Z][a-z]/g, 16 reg2 = /[0-9A-z][A-Z][a-z]/g; 17 console.log(str.match(reg1)); // ['1Fs'] 18 console.log(str.match(reg2)); // ['1Fs'] 19 20 // 4:^的使用 21 var str = '0Sdfsdfsfs231Fssfd-sdfsd', 22 reg1 = /[^0][A-Z][a-z]/g, 23 reg2 = /^[0][A-Z][a-z]/g 24 console.log(str.match(reg1)); // ['1Fs'] ^放到选择括号内的最前面作非使用 25 console.log(str.match(reg2)); // ['0Sd'] ^放到表达式前面表示只匹配字符串开头 26 27 // 5:|的使用 28 var str = '123sdfsdfsfs234Fssfd-sdfsd', 29 reg = /123|234/g; 30 console.log(str.match(reg)); // ['123', '234'] 把符合条件的都选出来 31 32 33 // 6:()的使用 34 35 var str = '123sdfsdfsfs234Fssfd-sdfsd', 36 reg = /(123|234)[A-z]/g; 37 console.log(str.match(reg)); // [ '123s', '234F' ] ()括号里面的内容优先执行
元字符 正则使用的转义字符
1 // 元字符 正则使用的转义字符 2 // w === [0-9A-z_] 3 var str = '123absdf', 4 reg = /wab/g; 5 6 console.log(str.match(reg)); // [ '3ab' ] 7 8 // W === [^w] 9 var str = '123%absdf', 10 reg = /Wab/g; 11 12 console.log(str.match(reg)); // [ '%ab' ] 13 14 // d === [0-9] digit 15 var str = '123absdf', 16 reg = /dab/g; 17 18 console.log(str.match(reg)); // [ '3ab' ] 19 20 // D === [^d] 21 var str = '123%absdf', 22 reg = /Dab/g; 23 24 console.log(str.match(reg)); // [ '%ab' ] 25 26 // s === [ vf] (不常用) 27 // : 回车符 : 换行符 : 制表符 tab v: 垂直换行符 f: 换页符 28 29 // S === [^s] (不常用) 30 // 单词边界 31 var str = 'This is a test', 32 reg = /This/g; 33 console.log(str.match(reg)); //[ 'This' ] 34 35 var str = 'This is a test', 36 reg = /Thi/g; 37 console.log(str.match(reg)); //[ 'Thi' ] 38 39 // B 非单词边界 40 41 var str = 'This is a test', 42 reg = /ThiB/g; 43 console.log(str.match(reg)); //[ 'Thi' ] 44 45 var str = 'This is a test', 46 reg = /BhiB/g; 47 console.log(str.match(reg)); //[ 'hi' ] 48 49 // . 可以匹配除了回车和换行的所有字符 50 var str = 'This is a test', 51 reg = /./g; 52 console.log(str.match(reg)); // [ 'T', 'h', 'i', 's', 'i', 's', 'a', ' ', 't', 'e', 's', 't' ] 53 54 // 匹配三位连续的所有字符 55 var str = 'abcdef', 56 reg = /[wW][sS][dD]/g; 57 console.log(str.match(reg)); // [ 'abc', 'def' ]
正则量词
规则:字符串从左到右,依次先匹配多,再匹配少,如果一旦匹配上就不回头匹配。
(1)不回头
(2)贪婪模式
1 // 1. n+ {1, 正无穷} 2 var reg = /w+/g, 3 str = 'abcdefg'; 4 console.log(str.match(reg)); // [ 'abcdefg' ] 5 6 // 2. n* {0, 正无穷} 7 var reg = /w*/g, 8 str = 'abcdefg'; 9 console.log(str.match(reg)); // [ 'abcdefg', '' ] 10 11 // 3. n? {0, 1} 12 var reg = /w?/g, 13 str = 'abcdefg'; 14 console.log(str.match(reg)); // [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', '' ] 15 16 // 4. n{x,y} {1,正无穷} === n+ {0,正无穷} === n* {0,1} === n? 17 var reg = /w{2,3}/g, 18 str = 'abcdefg'; 19 console.log(str.match(reg)); // [ 'abc', 'def' ] 20 21 var reg = /w{0,3}/g, 22 str = 'abcdefg'; 23 console.log(str.match(reg)); // [ 'abc', 'def', 'g', '' ] 24 25 var reg = /w{0,}/g, 26 str = 'abcdefg'; 27 console.log(str.match(reg)); // [ 'abcdefg', '' ] 28 29 // 5. ^n 匹配任何以n开头的字符串 30 var reg = /^ab/gm, 31 str = 'abcdefg abef'; 32 console.log(str.match(reg)); // [ 'ab', 'ab' ] 33 34 // 6. n$ 匹配任何以n结尾的字符串 35 var reg = /ab$/gm, 36 str = 'abcdeab abab'; 37 console.log(str.match(reg)); // [ 'ab', 'ab' ] 38 39 // 练习1:检查字符串是否以abcd开头和以abcd结尾 40 var reg = /^abcdw*abcd$/, // 建议使用 reg = /^abcd.*abcd$/ 41 str = 'abcd123123abcd'; 42 console.log(reg.test(str)); // true 43 44 // 练习2:检查字符串是否以abcd开头或以abcd结尾 45 var reg = /^abcd|abcd$/, 46 str = 'abcd123123abcd'; 47 console.log(reg.test(str)); // true 48 49 // 练习3:检查字符串是否以abcd和abcd结尾,并且开头结尾之间是数字 50 var reg = /^abcdd+abcd$/, // 不能用d* 51 str = 'abcd213abcd'; 52 console.log(reg.test(str)); // true 53 54 // 练习4:匹配以138开头的11位手机号 55 var reg = /^138d{8}/g, 56 str = '13896441012'; 57 console.log(str.match(reg)); // [ '13896441012' ] 58 59 // 7. ?=n 匹配任何其后紧接着指定字符串n的字符串 60 var reg = /a(?=b)/g, 61 str = 'abcdaccda'; 62 console.log(str.match(reg)); // [ 'a' ] 63 64 // 8. ?!n 匹配任何其后紧接着不为指定字符串n的字符串 65 var reg = /a(?!b)/g, 66 str = 'abcdaccda'; 67 console.log(str.match(reg)); // [ 'a', 'a' ] 68 69 // 子表达式:用括号()括起来 70 // 反向引用:1111 71 72 73 var reg = /(a)111/g, 74 str = 'bbaaaaccaaaaiddddaaaa'; 75 console.log(str.match(reg)); // [ 'aaaa', 'aaaa', 'aaaa' ] 76 77 var reg = /(w)111/g, 78 str = 'bbaaaaccaaaaiddddaaaa'; 79 console.log(str.match(reg)); // [ 'aaaa', 'aaaa', 'dddd', 'aaaa' ] 80 81 var reg = /(w)1(w)2/g, 82 str = 'bbaaaaccaaaaiddddaaaa'; 83 console.log(str.match(reg)); // [ 'bbaa', 'aacc', 'aaaa', 'dddd', 'aaaa' ]