在线测试、帮助

创建

js

  1. var re1 = /ABC\-001/; // /正则表达式/
  2. var re2 = new RegExp('ABC\\-001'); // new RegExp('正则表达式')

Python

Python-09.爬虫

使用

js

  1. //1、声明正则表达式
  2. var re1 = /[a]/;
  3. //2、格式:变量.函数(要匹配的字符串)
  4. re1.test("abc"); //test函数是测试是否匹配,这里结果为true
  5. re1.test("bc"); //test函数是测试是否匹配,结果为false

规则

1、匹配字符

连续字符

  1. var re=/abc/;
  2. re.test("abc"); //true
  3. re.test("acb"); //false

[ ] 任意多个字符(不要求连续)

  1. var re=/[abc]/;
  2. re.test("a"); //true
  3. re.test("acb"); //true

[^ ] 不在括号内的任意字符(不要求连续)

  1. var re=/[^abc]/;
  2. re.test("a"); //false
  3. re.test("acb"); //false
  4. re.test("eee123"); //true

[ - ] 括号内的一定范围

  1. //a到z中的任意字符
  2. var re=/[a-z]/;
  3. re.test("a"); //true
  4. re.test("acbsdfsdfdsf"); //true
  5. //a到z以及0-9的任意字符
  6. var re=/[a-z0-9]/;
  7. re.test("a32313"); //true
  8. re.test("33223acbsdfsdfdsf"); //true
  9. //是否出现不是a到z中的任意字符
  10. var re=/[^a-z]/;
  11. re.test("afds"); //false
  12. re.test("acb1"); //true
  13. //是否出现不是a到z以及0-9的任意字符
  14. var re=/[^a-z0-9]/;
  15. re.test("a32313"); //false
  16. re.test("AC"); //true

. 匹配除换行符之外的任何字符

等价于 [^\n\r]

\d 任意数字

等价于 [0-9]

\D 非数字

等价于 [^0-9]

\w 字母、数字、下划线

等价于 [A-Za-z0-9_]

\W 非字母、非数字、非下划线

等价于 [^A-Za-z0-9_]

\s 空格, 制表符, 换行符

\S 非空格, 非制表符, 非换行符

例子都是一样的

  1. var re=/\d/;
  2. re.test("123"); //true
  3. re.test("acb"); //false
  4. re.test("eee123"); //true
  5. //和连续字符配合
  6. var re=/a\d/;
  7. re.test("123"); //false
  8. re.test("acb"); //false
  9. re.test("eee123"); //false
  10. re.test("a3"); //true
  11. re.test("b2a133333"); //true

2、定位

^ 以什么开头

  1. var re=/^a1/; //以连续的a1开头
  2. re.test("Ab"),//false
  3. re.test("a133333") //true

$ 以什么结尾

  1. var re=/a1$/; //以连续的a1结尾
  2. re.test("Ab"),//false
  3. re.test("33333a1") //true

\b 单词边界

  1. var re=/s\b/; \\是否存在s和边界组成的字符,如s. s空格 s制表符,多数相当于单词以s结尾
  2. re.test("she like Ass."),//true
  3. re.test("33333a1") //false
  4. var re=/\bs/; \\是否存在s和边界组成的字符,如.s 空格s 制表符s,多数相当于单词以s开头
  5. re.test("he like ball."),//false
  6. re.test("she like ball") //true

\B 非单词边界

  1. var re=/s\B/; \\是否存在不是边界的s
  2. re.test("he like basll. "),//false
  3. re.test("she like ball") //true
  4. var re=/\Bs/; \\是否存在不是边界的s
  5. re.test("he like basll."),//true
  6. re.test("she like ball") //false
  7. re.test(".she like ball") //false

3、数量

+ 符号至少出现1个或更多

  1. var re=/ab+/; \\至少出现1ab
  2. re.test("ab"),//true
  3. re.test("a b") //false

* 符号至少出现0个或更多

  1. var re=/ab*/; \\至少出现0ab
  2. re.test("ab"),//true
  3. re.test("123123a") //true

{a,b} 符号至少出现a到b次

  1. var re=/b{2,3}/; \\至少出现2次到3ab
  2. re.test("ab"),//false
  3. re.test("bbbb"), //true
  4. re.test("bbb") //true

? 符号出现0或1次

  1. var re=/colou?r/; \\至少出现0次或1ab
  2. re.test("color"),//true
  3. re.test("colour"), //true
  4. re.test("coloour") //false

| 多选,或

  1. var re=/a|b|c/; \\至少出现abc
  2. re.test("acb"),//true
  3. re.test("edf"), //false
  4. re.test("cedf") //true

clipboard.png

======================

search 搜索 replace 替换

  1. var str = "Visit w3cschool";
  2. var n = str.search(/w3cschool/i);
  3. var res = str.replace(/W3CSHOOL/i, "123");
  4. var txt = str.search(/[o]/i); //匹配含有o的
  5. war str = str.search(/\w/i); //匹配字母
  6. var txt1 = str.search(/[b]+/i); //匹配至少1个b
  7. var txt2 = str.search(/[o]{1,4}/i); //匹配最少1个o,最多4个o,不包含

正则表达式使得搜索功能更加强大(如实例中不区分大小写)。

split 切分

  1. 'a b c'.split(' '); // ['a', 'b', '', '', 'c']
  2. 'a b c'.split(/\s+/); // ['a', 'b', 'c']
  3. 'a,b, c d'.split(/[\s\,]+/); // ['a', 'b', 'c', 'd']
  4. 'a,b;; c d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']

exec 分组(提取子串)

用()表示的就是要提取的分组(Group)

  1. var re = /^(\d{3})-(\d{3,8})$/;
  2. re.exec('010-12345'); // ['010-12345', '010', '12345']
  3. re.exec('010 12345'); // null
  4. var re = /^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$/;
  5. re.exec('19:05:30'); // ['19:05:30', '19', '05', '30']

命名捕获分组(ES9)

正常,是通过数组下标
image.png
image.png

分组,可以通过一个属性group获取,避免以后下标发生变化导致结果有问题
image.png
image.png

正向断言(ES9)

根据后面的内容,判断前面的是不是合法的
image.png
image.png

反向断言(ES9)

根据前面的内容,判断后面的是否合法
image.png

dotAll模式(ES9)

正常
image.png image.png
.all模式
image.png 加了/s,点就可以匹配任意字符
image.png
image.png

贪婪匹配

默认是贪婪匹配,把符合规则的全匹配进去。加问好就是非贪婪匹配

  1. var re = /^(\d+)(0*)$/;
  2. re.exec('102300'); // ['102300', '102300', '']
  3. var re = /^(\d+?)(0*)$/;
  4. re.exec('102300'); // ['102300', '1023', '00']

全局搜索

  1. var r1 = /test/g;
  2. // 等价于:
  3. var r2 = new RegExp('test', 'g');
  4. var s = 'JavaScript, VBScript, JScript and ECMAScript';
  5. var re=/[a-zA-Z]+Script/g;
  6. // 使用全局匹配:
  7. re.exec(s); // ['JavaScript']
  8. re.lastIndex; // 10
  9. re.exec(s); // ['VBScript']
  10. re.lastIndex; // 20
  11. re.exec(s); // ['JScript']
  12. re.lastIndex; // 29
  13. re.exec(s); // ['ECMAScript']
  14. re.lastIndex; // 44
  15. re.exec(s); // null,直到结束仍没有匹配到

/g,可以在上一个匹配的基础上,再匹配