JavaScript之正则表达式

转义 概念:转换意义,改变意义 转义符号: 转义字符: 字符 (注意:只能能在编辑器上使用,而不能在文本中使用,即在html标签中不可使用) 特殊转义字

转义

概念:转换意义,改变意义

转义符号: \

转义字符: \字符 (注意:只能能在编辑器上使用,而不能在文本中使用,即在html标签中不可使用)

特殊转义字符:

  (a) \n: 换行符
  (b) \r: 回车符
  (c) \t: 制表符(四个字符)

 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 === [\r\n\t\v\f] (不常用)
27 // \r: 回车符  \n: 换行符  \t: 制表符  tab  \v: 垂直换行符  \f: 换页符
28 
29 // \S === [^\s] (不常用)
30 // \b 单词边界
31 var str = 'This is a test',
32     reg = /\bThis\b/g;
33 console.log(str.match(reg)); //[ 'This' ]
34 
35 var str = 'This is a test',
36   reg = /\bThi/g;
37 console.log(str.match(reg)); //[ 'Thi' ]
38 
39 // \B 非单词边界
40 
41 var str = 'This is a test',
42   reg = /\bThi\B/g;
43 console.log(str.match(reg)); //[ 'Thi' ]
44 
45 var str = 'This is a test',
46   reg = /\Bhi\B/g;
47 console.log(str.match(reg)); //[ 'hi' ]
48 
49 // . 可以匹配除了回车和换行的所有字符
50 var str = 'This\ris\na\ttest',
51     reg = /./g;
52 console.log(str.match(reg)); // [ 'T', 'h', 'i', 's', 'i', 's', 'a', '\t', 't', 'e', 's', 't' ]
53 
54 // 匹配三位连续的所有字符
55 var str = 'abcdef',
56   reg = /[\w\W][\s\S][\d\D]/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\nabef';
32 console.log(str.match(reg)); // [ 'ab', 'ab' ]
33 
34 // 6. n$ 匹配任何以n结尾的字符串
35 var reg = /ab$/gm,
36   str = 'abcdeab\nabab';
37 console.log(str.match(reg)); // [ 'ab', 'ab' ]
38 
39 // 练习1:检查字符串是否以abcd开头和以abcd结尾
40 var reg = /^abcd\w*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 = /^abcd\d+abcd$/, // 不能用\d*
51   str = 'abcd213abcd';
52 console.log(reg.test(str)); // true
53 
54 // 练习4:匹配以138开头的11位手机号
55 var reg = /^138\d{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 // 反向引用:\1\1\1\1
71 
72 
73 var reg = /(a)\1\1\1/g,
74     str = 'bbaaaaccaaaaiddddaaaa';
75 console.log(str.match(reg)); // [ 'aaaa', 'aaaa', 'aaaa' ]
76 
77 var reg = /(\w)\1\1\1/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' ]

 

您可能有感兴趣的文章
JavaScript获取标签的几种方式小结

JavaScript常用标签和方法总结

一文详解HTML中script 标签的属性

JSscript标签有哪些属性

JavaScript正则的声明与如何使用