You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// 开始与结束'I love Rainbow.'.replace(/^/,'❤️');// ❤️I love Rainbow.'I love Rainbow.'.replace(/$/,'❤️');// I love Rainbow.❤️// \b 单词的边界'I love Rainbow.'.replace(/\b/,'❤️');// ❤️I❤️ ❤️love❤️ ❤️Rainbow❤️.// \B 非单词的边界'I love Rainbow.'.replace(/\B/,'❤️');// I l❤️o❤️v❤️e R❤️a❤️i❤️n❤️b❤️o❤️w.❤️// (?:p) 和直接匹配 p 差不多,表示非捕获组'I love Rainbow.'.replace(/(?:R)/,'❤️');// I love ❤️ainbow.x(?=y)前瞻肯定断言x被y跟随时匹配xx(?!y)前瞻否定断言x,仅当后面不跟y(?<=y)x后瞻肯定断言x,仅当跟在y后面(?<!y)x后瞻否定断言x,仅当不跟在y后面// (?=p) 符合p子模式前面的那个位置 (正向先行断言)'I love Rainbow.'.replace(/(?=R)/,'❤️');// I love ❤️Rainbow.// (?!p) 符合非p子模式前面的那个位置 (负向先行断言)'I love Rainbow.'.replace(/(!R)/,'❤️');// ❤️I❤️ ❤️l❤️o❤️v❤️e❤️ R❤️a❤️i❤️n❤️b❤️o❤️w❤️.❤️// (?<=p) 符合p子模式后面(注意(?=p)表示的是前面)的那个位置'I love Rainbow.'.replace(/(<=R)/,'❤️');// I love R❤️ainbow.// (?<=p)反过来的意思,可以理解为(?<=p)匹配到的位置之外的位置都是属于(?<!p)的'I love Rainbow.'.replace(/(<!R)/,'❤️');// ❤️I❤️ ❤️l❤️o❤️v❤️e❤️ ❤️Ra❤️i❤️n❤️b❤️o❤️w❤️.❤️
// 单词间隔换为 ❤️,实现类似 \s"I love Rainbow.".replace(/(?!\.)\W/,"❤️");// I❤️love❤️Rainbow.
varstr="Hei, my name is <%name%>, and I'm <%info.age%> years old. I like <%info.likes[0].name%>.";varobj={name: "yanyue404",info: {age: "20",likes: [{id: 1,name: "basketball",},],},};alert(tplEngine(str,obj));// Hei, my name is yanyue404, and I'm 20 years old. I like basketball.
vartpl="<% for(var i = 0; i < posts.length; i++) {"+"var post = posts[i]; %>"+"<% if(!post.expert){ %>"+"<span>post is null</span>"+"<% } else { %>"+'<a href="#"><% post.expert %> at <% post.time %></a>'+"<% } %>"+"<% } %>";vardata={posts: [{expert: "content 1",time: "yesterday",},{expert: "content 2",time: "today",},{expert: "content 3",time: "tomorrow",},{expert: "",time: "eee",},],};console.log(tplEngine(tpl,data));// <a href="#">content 1 at yesterday</a>// <a href="#">content 2 at today</a>// <a href="#">content 3 at tomorrow</a>// <span>post is null</span>
前言
记录正则实际使用案例,举一反三。
搭配在线工具
匹配字符
校验
网络接口的 MAC 地址 由 6 个以冒号分隔的两位十六进制数字组成。
例如:'01:32:54:67:89:AB'。
编写一个检查字符串是否为 MAC 地址的正则表达式。
用例:
只要是 13,14,15,16,17,18,19 开头即可
仅允许中文、字母、数字和
•_-
2 代,18 位数字,最后一位是校验位,可能为数字或字符 X
1-1000
大于等于 0, 小于等于 150, 支持小数位出现 5, 如 145.5, 用于判断考卷分数
1-65535
提取有效信息
找出形如 #abc 或 abcdef 的颜色值。即
#
后面跟着 3 个或 6 个十六进制的数字。(1)手机号
保留前 3 位和最后 4 位,其余用*代替。
(2)姓名
3 个字以内隐藏第 1 个字,4-6 个字隐藏前 2 个字,大于 6 个字隐藏第 3-6 个字,隐藏字用*代替;
(3)身份证
号码最后四位用*替换。
编写一个正则表达式,找出所有十进制数字,包括整数、浮点数和负数。
用例:
解决方案带有可选小数部分的正数:
\d+(\.\d+)?
。让我们在开头加上可选的 -:
一个算术表达式由 2 个数字和一个它们之间的运算符组成,例如:
运算符为 "+"、"-"、"*" 或 "/" 中之一。
在开头、之间的部分或末尾可能有额外的空格。
创建一个函数
parse(expr)
,它接受一个表达式作为参数,并返回一个包含 3 个元素的数组:用例:
匹配位置
语法例子
数字的千分位分割法
自后向前
自前向后匹配
手机号 3-4-4 分割
将手机号 13112345678 转化为 131-1234-5678
综合案例
提取 img 信息
提取 table 内容
实现一个模板引擎
测试例子:
参考链接
The text was updated successfully, but these errors were encountered: