其实,正则还是要靠自己多写,这样才能记住那些复杂的规则,推荐MDN的基础篇及正美的博客,希望对你有帮助:
正则表达式
元字符匹配
\b 比如: 匹配hello
var reg = /\bhello\b/;
console.log(reg.test('hello')); // true
字符转义
\.或\* 比如: 匹配以*开头的字符串
var reg = /^\*\w*/;
console.log(reg.test('*123&dkkfwe')); // true
字符类
\d 跟 [0-9] 表示只能为数字;
\w 跟 [0-9a-zA-Z] 表示只能为字母数字;
[?!.]表示匹配(.或?或!)
重复
+ 表示1次或多次
* 表示重复多次或零次
? 表示重复零次或一次
{n} 表示重复n次
{n, m} 表示重复n到m次
{n,} 表示重复那次或多次
分支条件
| 表示分支符,表示条件分支,分支的规则是从左至右;
分组
小括号来指定子表达式(也叫做分组),比如:
var reg = /(\d{1,3}\.){3}/;
reg.test('256.127.234.'); // true
反义
\W 表示匹配任意不是字母、数字、下划线、汉字的字符
\D 匹配任意非数字的字符
\S 匹配任意不是空白符的字符
\B 匹配任意不是单词开头或结束的位置
[^\x] 匹配除了x以外的任意字符
捕获性分组和非捕获性分组
并不是所有分组都能创建反向引用,有一种特别的分组称之为非捕获性分组,反之则为捕获性分组;比如:
// 非捕获行分组
var color = '#999999';
var result = /#(?:\d+)/.test(color);
console.log(RegExp.$1); // ''
// 捕获性分组
var color1 = '#888888';
var result2 = /#(\d+)/.test(color1);
console.log(RegExp.$1); // 888888
非捕获分组,只是用来匹配,并不会提取分组内容。也就是说,如果我们只想用圆括号将一些字符用数量词修饰,并不需要这个分组的内容,这就是非捕获分组。
正向前瞻与负向前瞻
这两个都是分组内的一些条件:
(?=exp) 正向前瞻,匹配exp前面的位置
(?!exp) 负向前瞻,匹配exp后面不是exp的位置