深色模式
正则
特殊用法
反向引用
反向引用只能用来引用括号里面的子表达式
\1 表示第一个子表达式 \2 表示第二个子表达式
特殊的 \0 匹配整个表达式
js
<Hh([1-6])>.*?<\/[Hh]\1>
匹配 h1~h6 标签,上面可以匹配 <h1>foo</h1>
而不匹配 <h1>sdfasf</h2>
上面([1-6])
是第一个表达式, 而 \1
匹配第一个子表达式
.*? 是栏匹配用法。
替换
有如下示例
js
const reg1 = /(\w+[\w\.]*@[\w\.]+\.\w+)/i;
const repStr = `<a href="mailto:$1">$1</a>`;
const str1 = 'Hello, zunkun@liuzunkun.com, this is my email';
const str2 = str1.replace(reg1, repStr);
console.log({ str1, str2 });
// str1: 'Hello, zunkun@liuzunkun.com, this is my email',
// str2: 'Hello, <a href="mailto:zunkun@liuzunkun.com">zunkun@liuzunkun.com</a>, this is my email'
上面的示例 $1 替换第一个引用第一个子表达式执行替换操作
下面的替换更能看到 $ 符号在字符替换上的用处
js
const reg = /(\d{3})(-)(\d{3})(-)(\d{4})/i;
const str1 = '313-555-1234';
const repStr = '($1)---$3---$5';
const str2 = str1.replace(reg, repStr);
console.log('str1: ', str1);
console.log('str2: ', str2);
// str1: 313-555-1234
// str2: (313)---555---1234
向前查看 ?= 用法
?= 向前查看,匹配 ?= 后面的正则规则,但是不消耗后面的规则,
.+(😃: 匹配 https:, 此处消耗 : 符号
.+(?=:) 匹配 https 而不消耗 : 符号
js
const reg = /.*(?=<\/h1)/;
const str1 = `
<h1>test page </h1>
<p>this is a p line </p>
<h3>sdafasfa<h3>
<h4>sdafasfa<h4>
<h3>sdafasfa<h3>
`;
console.log('str1: ', str1);
const exec = reg.exec(str1);
console.log(exec);
常用正则匹配
邮箱
js
/(\w+-*\.)*\w+@(\w+-*\w+\.)+[a-zA-Z]/;
IP 地址
js
((25[0-5])|(2[0-4]\d)|(1\d{2})(\d{1,2})\.){3}((25[0-5])|(2[0-4]\d)|(1\d{2})(\d{1,2})\.)
URL
jsx
/^https?:\/\/[\w.-]+(:\d*)?(\/([\w\/-]*(\?\S+)?)?)?/;
日期
js
(19|20)\d{2}-((0?[1-9])|(10|11|12))-((0?\d)|([12]\d)|(3[01]))