在线测试、帮助
创建
js
var re1 = /ABC\-001/; // /正则表达式/var re2 = new RegExp('ABC\\-001'); // new RegExp('正则表达式')
Python
使用
js
//1、声明正则表达式var re1 = /[a]/;//2、格式:变量.函数(要匹配的字符串)re1.test("abc"); //test函数是测试是否匹配,这里结果为truere1.test("bc"); //test函数是测试是否匹配,结果为false
规则
1、匹配字符
连续字符
var re=/abc/;re.test("abc"); //truere.test("acb"); //false
[ ] 任意多个字符(不要求连续)
var re=/[abc]/;re.test("a"); //truere.test("acb"); //true
[^ ] 不在括号内的任意字符(不要求连续)
var re=/[^abc]/;re.test("a"); //falsere.test("acb"); //falsere.test("eee123"); //true
[ - ] 括号内的一定范围
//a到z中的任意字符var re=/[a-z]/;re.test("a"); //truere.test("acbsdfsdfdsf"); //true//a到z以及0-9的任意字符var re=/[a-z0-9]/;re.test("a32313"); //truere.test("33223acbsdfsdfdsf"); //true//是否出现不是a到z中的任意字符var re=/[^a-z]/;re.test("afds"); //falsere.test("acb1"); //true//是否出现不是a到z以及0-9的任意字符var re=/[^a-z0-9]/;re.test("a32313"); //falsere.test("AC"); //true
. 匹配除换行符之外的任何字符
\d 任意数字
\D 非数字
\w 字母、数字、下划线
\W 非字母、非数字、非下划线
\s 空格, 制表符, 换行符
\S 非空格, 非制表符, 非换行符
例子都是一样的
var re=/\d/;re.test("123"); //truere.test("acb"); //falsere.test("eee123"); //true//和连续字符配合var re=/a\d/;re.test("123"); //falsere.test("acb"); //falsere.test("eee123"); //falsere.test("a3"); //truere.test("b2a133333"); //true
2、定位
^ 以什么开头
var re=/^a1/; //以连续的a1开头re.test("Ab"),//falsere.test("a133333") //true
$ 以什么结尾
var re=/a1$/; //以连续的a1结尾re.test("Ab"),//falsere.test("33333a1") //true
\b 单词边界
var re=/s\b/; \\是否存在s和边界组成的字符,如s. s空格 s制表符,多数相当于单词以s结尾re.test("she like Ass."),//truere.test("33333a1") //falsevar re=/\bs/; \\是否存在s和边界组成的字符,如.s 空格s 制表符s,多数相当于单词以s开头re.test("he like ball."),//falsere.test("she like ball") //true
\B 非单词边界
var re=/s\B/; \\是否存在不是边界的sre.test("he like basll. "),//falsere.test("she like ball") //truevar re=/\Bs/; \\是否存在不是边界的sre.test("he like basll."),//truere.test("she like ball") //falsere.test(".she like ball") //false
3、数量
+ 符号至少出现1个或更多
var re=/ab+/; \\至少出现1次abre.test("ab"),//truere.test("a b") //false
* 符号至少出现0个或更多
var re=/ab*/; \\至少出现0次abre.test("ab"),//truere.test("123123a") //true
{a,b} 符号至少出现a到b次
var re=/b{2,3}/; \\至少出现2次到3次abre.test("ab"),//falsere.test("bbbb"), //truere.test("bbb") //true
? 符号出现0或1次
var re=/colou?r/; \\至少出现0次或1次abre.test("color"),//truere.test("colour"), //truere.test("coloour") //false
| 多选,或
var re=/a|b|c/; \\至少出现a或b或cre.test("acb"),//truere.test("edf"), //falsere.test("cedf") //true

======================
search 搜索 replace 替换
var str = "Visit w3cschool";var n = str.search(/w3cschool/i);var res = str.replace(/W3CSHOOL/i, "123");var txt = str.search(/[o]/i); //匹配含有o的war str = str.search(/\w/i); //匹配字母var txt1 = str.search(/[b]+/i); //匹配至少1个bvar txt2 = str.search(/[o]{1,4}/i); //匹配最少1个o,最多4个o,不包含
正则表达式使得搜索功能更加强大(如实例中不区分大小写)。
split 切分
'a b c'.split(' '); // ['a', 'b', '', '', 'c']'a b c'.split(/\s+/); // ['a', 'b', 'c']'a,b, c d'.split(/[\s\,]+/); // ['a', 'b', 'c', 'd']'a,b;; c d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']
exec 分组(提取子串)
用()表示的就是要提取的分组(Group)
var re = /^(\d{3})-(\d{3,8})$/;re.exec('010-12345'); // ['010-12345', '010', '12345']re.exec('010 12345'); // nullvar 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])$/;re.exec('19:05:30'); // ['19:05:30', '19', '05', '30']
命名捕获分组(ES9)
正常,是通过数组下标

分组,可以通过一个属性group获取,避免以后下标发生变化导致结果有问题
正向断言(ES9)
反向断言(ES9)
根据前面的内容,判断后面的是否合法
dotAll模式(ES9)
正常

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

贪婪匹配
默认是贪婪匹配,把符合规则的全匹配进去。加问好就是非贪婪匹配
var re = /^(\d+)(0*)$/;re.exec('102300'); // ['102300', '102300', '']var re = /^(\d+?)(0*)$/;re.exec('102300'); // ['102300', '1023', '00']
全局搜索
var r1 = /test/g;// 等价于:var r2 = new RegExp('test', 'g');var s = 'JavaScript, VBScript, JScript and ECMAScript';var re=/[a-zA-Z]+Script/g;// 使用全局匹配:re.exec(s); // ['JavaScript']re.lastIndex; // 10re.exec(s); // ['VBScript']re.lastIndex; // 20re.exec(s); // ['JScript']re.lastIndex; // 29re.exec(s); // ['ECMAScript']re.lastIndex; // 44re.exec(s); // null,直到结束仍没有匹配到
/g,可以在上一个匹配的基础上,再匹配

