正则表达式

正则表达式

基础

元字符

在这里插入图片描述

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]  匹配单个字符  匹配成功

版权声明:本文为weixin_46058038原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。