js 正则表达式学习笔记
正则表达式
正则表达式是由一个字符序列形成的搜索模型
语法
new RegExp("[abc]")
/[abc]/
/正则表达式主体/修饰符(可选)
1.修饰符
i 忽略大小写
g 执行全局匹配 //global
m 执行多行匹配
2.表达式
[abc] 查找方括号之间的任何字符
[^abc] 查找任何不在方括号之间的字符
[0-9] 查找任何从0至9的数字
[a-z]查找任何从小写a到小写z的字符
(x|y) 查找任何|分割的选项
3.元字符
. 查找任意的单个字符,除了换行符外
\d 查找数字 === [0-9] digit(数字)
\D查找非数字 === [^0-9]
\s 查找空白字符 space
\b 匹配一个单词边界,也就是指单词和空格间的位置,比如’er\b’可以匹配”never”中的”er”,但是不能匹配”verb”中的”er”
\w 查找任意一个字母或数字或下划线,等价于[a-zA-Z0-9_] word
\uxxxx 查找以十六进制xxxx规定的Unicode字符
匹配任何字符 [\d\D]或[\w\W]或[\s\S]或[^]
4.量词
n+ 匹配任何包含至少一个n的字符 === n{1,}
n* 匹配任何包含零个或多个n的字符串 === n{0,}
n? 匹配任何含零或一个n的字符串 === n{0,1 }
?=n 匹配任何其后紧接指定字符串n的字符串,不包含n, 就是n前面的那个位置
?:n 匹配任何其后紧接指定字符串n的字符串,包含n
?!n 匹配任何其后没有紧接指定字符串n的字符串
(?<!exp)"匹配前面不是exp的位置;如:/(?!<\d)123/.exec("abc123 ") //["123", index: 3, input: "abc123 "]
^n 匹配任何开头为n的字符串
n$ 匹配任何结尾为n的字符串
/\d{2,5}?/ 表示,虽然 2 到 5 次都行,当 2 个就够的时候,就不再往下尝试了
(?!^)表示不是开头位置
5. 方法
1)String对的方法
str.search(/表达式/) 返回匹配到的第一个位置
str.split(/表达式/)
str.match(/表达式/)
str.replace(/表达式/,'')
2)RegExp对象方法
/表达式/.test(str) 返回布尔值
/表达式/.exec(str) 返回一个数组,存放匹配的结果,如果未找到匹配,则返回值为null
6.$
1、 2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串
$` 位于匹配子串左侧的文本
$' 位于匹配子串右侧的文本
$$ 直接量符号
//第一种情况:
'aa11AA'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$1'); // "aa"
'aa11AA'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$2'); // "11"
'aa11AA'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$3'); // "AA"
//猜想 如果是 $4 回事什么呢? undefined ?
'aa11AA'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$4'); // "$4"
//所以,要是没有该子项,则当成普通字符串处理了
//第二种情况:
'aa11AA'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$&'); //"aa11AA"
//第三种情况:
'aa11AA'.replace(/(\d+)/g, '$`'); //"aaaaAA"
//第四种情况:
'aa11AA'.replace(/(\d+)/g, "$'"); //"aaAAAA"
//第五种情况:
'aa11AA'.replace(/(\d+)/g, '$$'); //"aa$AA"
7.懒惰限定符(贪婪模式加?变为非贪婪模式)
"*?" 重复任意次,但尽可能少重复;如:"aabab".match(/a.*?b/)
// ["aab"] 为什么第一个匹配是aab(第一到第三个字符)而不是ab(第二到第三个字符)?
简单地说,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权。
"+?" 重复1次或更多次,但尽可能少重复,与上面一样,只是至少要重复1次。如:"aabab".match(/a.+?b/)
// ["aab"]"??" 重复0次或1次,但尽可能少重复。如:"aabab".match(/a.??b/)
// ["aab"]
"{n,m}?" 重复n到m次,但尽可能少重复。如:"aaa".match(/a{1,3}?/)
// ["a"]
"{n,}?" 重复n次以上,但尽可能少重复。如:"aaa".match(/a{1,}?/)
// ["a"]
8.需要转义的字符
* . ? + $ ^ [ ] ( ) { } | \ /
9. 临时缓存区
正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。
对一个正则表达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中。
(可以使用非捕获元字符 '?:', '?=', 或 '?!' 来忽略对这部分正则表达式的保存。)
所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。
存储子匹配的缓冲区编号从 1 开始,连续编号直至最大 99 个子表达式。
每个缓冲区都可以使用 '\n' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。
/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/
判断是否为yyyy-mm-dd格式的类型
\2 这里是匹配 (-|\/) 这里的字符,也就是,如果前面用了 - ,那这里也匹配 -,如果前面是 / ,那这里也匹配 /
/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/ === /^(\d{1,4})(-|\/)(\d{1,2})\2\3$/
10.应用
1)获取urlhttps://www.baidu.com?name=james&age=28里age的值
function getParamName(attr) {
let search = window.location.search,
match = RegExp(`[?&]${attr}=([^&]*)`).exec(search);
return match && decodeURIComponent(match[].trim());
}
getParamName('age')//28
2)数字格式化问题
let str = ''
let format = str.replace(/\B(?=(\d{})+(?!\d))/g, ',')
console.log(format) // 1,234,567,890
01 /\B(?=(\d{3})+(?!\d))/g:正则匹配边界\B,边界后面必须跟着(\d{3})+(?!\d);
02 (\d{3})+:必须是1个或多个的3个连续数字;
03 (?!\d):第2步中的3个数字不允许后面跟着数字;
04 (\d{3})+(?!\d):所以匹配的边界后面必须跟着3*n(n>=1)的数字。
参考地址:
1.http://www.cnblogs.com/tugenhua0707/p/5037811.html
2.https://segmentfault.com/a/1190000009590458
3.https://github.com/jawil/blog/issues/20
js 正则表达式学习笔记的更多相关文章
- js再学习笔记
#js再学习笔记 ##基本 1.js严格区分大小写 2.js末尾的分号可加,也可不加 3.六种数据类型(使用typeof来检验数据的类型) `typeof` - undefined: `var ...
- JS数组学习笔记
原文:JS数组学习笔记 最近在备课数组,发现很多ES5的方法平时很少用到.细节比较多,自己做了大量例子和整理,希望对大家了解JavaScript中的Array有所帮助. 概念 数组是值的有序集合.每个 ...
- JavaScript正则表达式学习笔记(二) - 打怪升级
本文接上篇,基础部分相对薄弱的同学请移步<JavaScript正则表达式学习笔记(一) - 理论基础>.上文介绍了8种JavaScript正则表达式的属性,本文还会追加介绍几种JavaSc ...
- javascript正则表达式 - 学习笔记
JavaScript 正则表达式 学习笔记 标签(空格分隔): 基础 JavaScript 正则表达式是用于匹配字符串中字符组合的模式.在javascript中,正则表达式也是对象.这些模式被用于Re ...
- JS正则表达式学习记录
JS:正则表达式学习记录 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- 小菜鸡学习---<正则表达式学习笔记2>
正则表达式学习笔记2 一.修饰符 前面我们学习的都是用于匹配的基本的关键的一些表达式符号,现在我们来学习修饰符.修饰符不写在正则表达式里,修饰符位于表达式之外,比如/runoob/g,这个最后的g就是 ...
- Knockout.js快速学习笔记
原创纯手写快速学习笔记(对官方文档的二手理解),更推荐有时间的话读官方文档 框架简介(Knockout版本:3.4.1 ) Knockout(以下简称KO)是一个MVVM(Model-View-Vie ...
- handlebars.js基础学习笔记
最近在帮学校做个课程网站,就有人推荐用jquery+ajax+handlebars做网站前端,刚接触发现挺高大上的,于是就把一些基础学习笔记记录下来啦. 1.引用文件: jquery.js文件下载:h ...
- JS&ES6学习笔记(持续更新)
ES6学习笔记(2019.7.29) 目录 ES6学习笔记(2019.7.29) let和const let let 基本用法 let 不存在变量提升 暂时性死区 不允许重复声明 块级作用域 级作用域 ...
随机推荐
- hadoop2.3安装过程及问题解决
三台serveryiprod01,02,03,当中01为namenode,02为secondarynamenode.3个均为datanode 3台server的这里提到的配置均需一样. 0.安装前提条 ...
- CF148D. Bag of mice(概率DP)
D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- Redmine后台修改admin密码
Redmine后台修改admin密码 进入redmine安装目录,假设redmine安装在/var/www/html/redmine/目录下. cd /var/www/html/redmine/scr ...
- jzyz集训 0611
今天jjh和mzx搞的互测题目有必要记录一下. T1:序列上可以放012三种颜色,有m个限制表示[l,r]区间的颜色数目必须是c,求方案数. 显然的DP,但关键是状态怎么设置,连续设置了n个状态都被自 ...
- Mac OS 配置Maven
步骤: 1. 下载Maven tar包 https://maven.apache.org/download.cgi?Preferred=http%3A%2F%2Fmirrors.tuna.tsingh ...
- [转]aliyun阿里云Maven仓库地址——加速你的maven构建
原文链接:http://www.cnblogs.com/geektown/p/5705405.html maven仓库用过的人都知道,国内有多么的悲催.还好有比较好用的镜像可以使用,尽快记录下来.速度 ...
- BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS & LDS (nlogn)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1609 题意: 给你一个只由数字"1,2,3"组成的序列a[i],共n个 ...
- python练习1(简单爬虫)
做一个简单的练习 目标:爬取中文小说 目标网站:http://www.biqule.com/book_58/26986.html 只爬取正文部分. 使用requests库来获取网页信息,使用re库正则 ...
- (转)HLS协议,html5视频直播一站式扫盲
本文来自于腾讯bugly开发者社区,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1277 视频直播这么火,再不学就 ou ...
- ACM学习历程——POJ3321 Apple Tree(搜索,线段树)
Description There is an apple tree outside of kaka's house. Every autumn, a lot of apples will ...