正则表达式
基础
元字符

1,匹配有abc开头的字符串:
\babc或者^abc
2. 匹配8位数字的QQ号码:
^\d\d\d\d\d\d\d\d$
3. 匹配1开头11位数字的手机号码:
^1\d\d\d\d\d\d\d\d\d\d$
4. 匹配内容必须以www开始
const hd = “www.houdunren.com”;
console.log(/^www/.test(hd)); //true
5匹配内容必须以.com结束
const hd = “www.houdunren.com”;
console.log(/.com$/.test(hd)); //true
选择符
| 这个符号带表选择修释符,也就是 | 左右两侧有一个匹配到就可以
const hd = "houdunren";
// 两个择其一
console.log(/houdunren|hdcms/.test(hd)); //true
重复限定符
为了处理这些重复问题,正则表达式中一些重复限定符,把重复部分用合适的限定符替代
1. 匹配8位数字的QQ号码:
^\d{8}$
2. 匹配1开头11位数字的手机号码:
^1\d{10}$
3. 匹配银行卡号是14~18位的数字:
^\d{14,18}$
4. 匹配以a开头的,0个或多个b结尾的字符串
^ab*$、
模式修饰

i
将所有houdunren.com 统一为小写
let hd = "houdunren.com HOUDUNREN.COM";
hd = hd.replace(/houdunren\.com/gi, "houdunren.com");
console.log(hd);
g
使用 g 修饰符可以全局操作内容
let hd = "houdunren";
hd = hd.replace(/u/, "@");
console.log(hd); //没有使用 g 修饰符是,只替换了第一个
let hd = "houdunren";
hd = hd.replace(/u/g, "@");
console.log(hd); //使用全局修饰符后替换了全部的 u
m
用于将内容视为多行匹配,主要是对 ^和 $ 的修饰
将下面是将以 #数字开始的课程解析为对象结构,学习过后面讲到的原子组可以让代码简单些
let hd = `
#1 js,200元 #
#2 php,300元 #
#9 houdunren.com # 后盾人
#3 node.js,180元 #
`;
// [{name:'js',price:'200元'}]
let lessons = hd.match(/^\s*#\d+\s+.+\s+#$/gm).map(v => {
v = v.replace(/\s*#\d+\s*/, "").replace(/\s+#/, "");
[name, price] = v.split(",");
return { name, price };
});
console.log(JSON.stringify(lessons, null, 2));
u
每个字符都有属性,如L属性表示是字母,P 表示标点符号,需要结合 u 模式才有效。其他属性简写可以访问 属性的别名 网站查看。
//使用\p{L}属性匹配字母
let hd = "houdunren2010.不断发布教程,加油!";
console.log(hd.match(/\p{L}+/u));
//使用\p{P}属性匹配标点
console.log(hd.match(/\p{P}+/gu));
字符也有unicode文字系统属性 Script=文字系统,下面是使用 \p{sc=Han} 获取中文字符 han为中文系统,其他语言请查看 文字语言表
let hd = `
张三:010-99999999,李四:020-88888888`;
let res = hd.match(/\p{sc=Han}+/gu);
console.log(res);
//使用 u 模式可以正确处理四个字符的 UTF-16 字节编码
let str = "??";
console.table(str.match(/[??]/)); //结果为乱字符"�"
console.table(str.match(/[??]/u)); //结果正确 "?"
分组
正则表达式中用小括号()来做分组,也就是括号中的内容作为一个整体。
^(ab)*
原子表

使用[]匹配其中任意字符即成功,下例中匹配ue任何一个字符,而不会当成一个整体来对待
const url = "houdunren.com";
console.log(/ue/.test(url)); //false / ue/ 匹配整一个 匹配失败
console.log(/[ue]/.test(url)); //true [ue] 匹配单个字符 匹配成功