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