JavaScript RegExp 对象

// 1 创建正则表达式两种方式
// 1.1 用new
// 第1个参数模式是必须的 第2个模式修饰符参数可选
// i:忽略大小写 g:全局匹配 m:多行匹配
var box = new RegExp('Box');
var box = new RegExp('Box', 'gim');// 1.2 用字面量的形式
// 两个反斜杠是正则表达式的字面量表示形成
var box = /Box/;
var box = /Box/gim;// 2 使用正则表达式两种方式
// 2.1 test()
/** 只查找最多一个匹配,如果找到就立即返回true,否则返回false** 如果为正则表达式设置了全局标志(g),test()函数仍然只查找最多一个匹配,* 不过我们再次调用该对象的test()函数将会从regExpObject.lastIndex索引位置处开始查找,从而找到下一个匹配。* 如果想要重新使用test()函数从头开始查找,则需要手动将regExpObject.lastIndex的值重置为 0。* * regExpObject.lastIndex 本次匹配内容的最后一个字符的下一个索引位置。关闭全局 regExpObject.lastIndex 的值永远为 0。*/
var pen = /Pen/i;
pen.test('pen'); // true
pen.test('pencil'); // true
pen.test('box'); // falsevar pattern = /google/g;
var str = 'google google google';
pattern.test(str); // true
pattern.lastIndex; // 6
pattern.test(str); // true
pattern.lastIndex; // 13
pattern.lastIndex = 0;
pattern.test(str); // true
pattern.lastIndex; // 6var pattern = /google/;
var str = 'google google google';
pattern.test(str); // true
pattern.lastIndex; // 0// 2.2 exec()
/** 如果 exec() 找到了匹配的文本,则返回一个结果数组。* 此数组的第 0 个元素是与正则表达式相匹配的文本,* 第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),* 第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。* RegExpObject 的 lastIndex 属性为匹配文本的最后一个字符的下一个位置。** 如果 exec() 找不到匹配的文本,返回 null。lastIndex 属性重置为 0。* */
var apple = /Apple/gi;
apple.exec('apple'); // ["apple"]
apple.exec('pineapple'); // ["apple"]
apple.exec('apple and pineapple'); // ["apple"]
apple.exec('pear'); // nullvar email = /(\w+)@(\w+)\.(\w+)/g;
email.exec("zhang@yeah.net and dan@qq.com"); // ["zhang@yeah.net", "zhang", "yeah", "net"]
email.lastIndex; // 14
email.exec("zhang@yeah.net and dan@qq.com"); // ["dan@qq.com", "dan", "qq", "com"]
email.lastIndex; // 29
email.exec("zhang@yeah.net and dan@qq.com"); // null
email.lastIndex; // 0// 3 使用String对象的正则表达式四种方法
// 3.1 match()
var bus = /Bus/i;
'bus'.match(bus); // ["bus"]
'Buses'.match(bus); // ["Bus"]
'This is a bus, it is my bus.'.match(bus); // ["bus"]
'These are buses, they are our buses.'.match(/Bus/gi); // ["bus", "bus"]
'car'.match(bus); // null// 3.2 search()
var flower = /flower/ig;
'flower'.search(flower); // 0
'red flower and pink flower'.search(flower); // 4
'tree'.search(flower); // -1// 3.3 replace(search, replacement)
// search 为正则表达式时 replacement可以使用 $1、$2、...、$99、$&、$`、$'、$$ 变量来动态确定用于替换的字符串内容
'stronger and stronger'.replace(/stronger/i, 'more'); // "more and stronger"
'stronger and stronger'.replace(/stronger/ig, 'more'); // "more and more"
'stronger and stronger'.replace(/and/, "$$"); // "stronger $ stronger"
'baidu google'.replace(/(.*)\s(.*)/, '$2 $1'); // "google baidu"// 3.4 split()
var and = /And/i;
'pen And pencil and rule'.split(and); // ["pen ", " pencil ", " rule"]
'pen'.split(and); // ["pen"]
'and pencil'.split(and); // ["", " pencil"]
'pen and'.split(and); // ["pen ", ""]// 4 正则表达式静态属性
// 所有静态属性只可读 匹配失败值不变 匹配成功值改变// 4.1 RegExp.$1 - RegExp.$9
// 正则表达式是支持分组捕获的,最前面的9个匹配文本会依次存储在RegExp的静态属性$1-$9中。
/(\w)-(\w)-(\w)-(\w)-(\w)-(\w)-(\w)-(\w)-(\w)-(\w)/.test('a-b-c-d-e-f-g-h-i-j-k-l-m-n-o'); // true
RegExp.$1; // "a"
RegExp['$1']; // "a"
RegExp.$2;; // "b"
RegExp['$2']; // "b"
// ...
RegExp.$9; // "i"
RegExp['$9']; // "i"// 4.2 RegExp.input
// 被匹配字符串 也可以表示成 RegExp['$_'] 或者 RegExp.$_
/pen/.test("pen and pencil"); // true
RegExp.input; // "pen and pencil"
RegExp['$_']; // "pen and pencil"
RegExp.$_; // "pen and pencil"// 4.3 RegExp.leftContext
// 当前成功匹配文本之前的所有字符 也可以表示成 RegExp["$`"]
var pen = /pen/g;
pen.test("A pen and a pencil"); // true
RegExp.leftContext; // "A "
RegExp["$`"]; // "A "
pen.test("A pen and a pencil"); // true
RegExp.leftContext; // "A pen and a "
RegExp["$`"]; // "A pen and a "// 4.4 RegExp.rightContext
// 当前成功匹配文本之后的所有字符 也可以表示成 RegExp["$'"]
var pen = /pen/g;
pen.test("A pen and a pencil"); // true
RegExp.rightContext; // " and a pencil"
RegExp["$'"]; // " and a pencil"
pen.test("A pen and a pencil"); // true
RegExp.rightContext; // "cil"
RegExp["$'"]; // "cil"// 4.5 RegExp.lastMatch
// 最后匹配到的字符串 也可以表示成 RegExp['$&']
var pen = /pen/g;
pen.test("A pen and a pencil"); // true
RegExp.lastMatch; // "pen"
RegExp['$&']; // "pen"// 4.6 RegExp.lastParen
// 最后带括号的子匹配 也可以表示成 RegExp["$+"]
/(\w)-(\w)-(\w)-(\w)-(\w)-(\w)-(\w)-(\w)-(\w)-(\w)/.test('a-b-c-d-e-f-g-h-i-j-k-l-m-n-o'); // true
RegExp.lastParen; // "j"
RegExp["$+"]; // "j"// 5 正则表达式实例属性
// 5.1 regExpObject.global
// 正则表达式是否具有global标志
/google/.global; // false
/google/gim.global; // true// 5.2 regExpObject.ignoreCase
// 正则表达式是否具有ignoreCase标志
/google/.ignoreCase; // false
/google/gim.ignoreCase; // true// 5.3 regExpObject.multiline
// 正则表达式是否具有multiline标志
// IE不支持multiline属性 很多的浏览器也不支持该属性
/google/.multiline; // false
/google/gim.multiline; // true// 5.4 regExpObject.source
// 正则表达式模式的文本内容
/google/.source; // "google"
/google/gim.source; // "google"// 6 正则表达式模式
// ^n 以 n 开头
// n$ 以 n 结束// n* 零个或多个 n 
var patter = /go*gle/;
patter.test("ggle"); // true
patter.test("gogle"); // true
patter.test("google"); // true// n+ 至少一个 n 
var patter = /go+gle/;
patter.test("ggle"); // false
patter.test("gogle"); // true
patter.test("google"); // true// n? 零个或一个 n 
var patter = /go?gle/;
patter.test("ggle"); // true
patter.test("gogle"); // true
patter.test("google"); // false// n{X} X 个 n
var patter = /go{2}gle/;
patter.test("gogle"); // false
patter.test("google"); // true
patter.test("gooogle"); // false// n{X,} 至少 X 个 n
var patter = /go{2,}gle/;
patter.test("gogle"); // false
patter.test("google"); // true
patter.test("gooogle"); // true// n{X,Y} 至少 X 个 n,最多 Y 个 n。
var patter = /go{2,3}gle/;
patter.test("gogle"); // false
patter.test("google"); // true
patter.test("gooogle"); // true
patter.test("goooogle"); // false// ? 紧跟在*,+,?,{n},{n,},{n,m})任何一个后面时,匹配模式是非贪婪的。
// 非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
/[a-z]+/.exec('abcdef'); // ["abcdef"]
/[a-z]+?/.exec('abcdef'); // ["a"]var greed = /[a-z]+/g;
greed.exec('abcdef'); // ["abcdef"]
greed.exec('abcdef'); // null
var lazy = /[a-z]+?/g;
lazy.exec('abcdef'); // ["a"]
lazy.exec('abcdef'); // ["b"]
lazy.exec('abcdef'); // ["c"]
lazy.exec('abcdef'); // ["d"]
lazy.exec('abcdef'); // ["e"]
lazy.exec('abcdef'); // ["f"]
lazy.exec('abcdef'); // null'abcdef'.replace(/[a-z]+/, '贪婪'); // "贪婪"
'abcdef'.replace(/[a-z]+?/, '惰性'); // "惰性bcdef"'abcdef'.replace(/[a-z]+/g, '贪婪'); // "贪婪"
'abcdef'.replace(/[a-z]+?/g, '惰性'); // "惰性惰性惰性惰性惰性惰性"/[a-z]{3,6}/.exec('abcdef'); // ["abcdef"]
/[a-z]{3,6}?/.exec('abcdef'); // ["abc"]// . 一个任意字符,除了换行和行结束符。
var patter = /g.gle/;
patter.test("ggle"); // false
patter.test("gogle"); // true
patter.test("g2gle"); // true
patter.test("google"); // false// (pattern) 捕获性分组 匹配pattern并获取这一匹配
/(\d+)([a-z]+)(\d+)/.exec('123abc456'); // ["123abc456", "123", "abc", "456"]// (pattern(pattern)) 嵌套分组 从外往内捕获
/(a?(b?(c?)))/.exec('abc'); // ["abc", "abc", "bc", "c"]// (?:pattern) 非捕获性分组 匹配pattern但不获取匹配结果
/(\d+)(?:[a-z]+)(\d+)/.exec('123abc456'); // ["123abc456", "123", "456"]// (?=pattern) 正向肯定预查 非获取匹配
var pattern = /goo(?=gle)/;
pattern.exec('good'); // null
pattern.exec('google'); // ["goo"]
RegExp.$1; // ""var pattern = /pe(?=n)/g;
var str = 'a pen and a pencil';
pattern.exec(str); // ["pe"]
pattern.lastIndex; // 4
pattern.exec(str); // ["pe"]
pattern.lastIndex; // 14
pattern.exec(str); // null
pattern.lastIndex; // 0// x|y 匹配x或y// [abc] 方括号之间的任何一个字符,方括号内的字符可以是任何字符或字符范围。
var patter = /g[0-9a-zAB]gle/;
patter.test("ggle"); // false
patter.test("gogle"); // true
patter.test("g2gle"); // true
patter.test("gAgle"); // true
patter.test("gBgle"); // true
patter.test("google"); // false
patter.test("gABgle"); // false// [A-Z] A-Z中的任意一个字符
// [a-z] a-z中的任意一个字符
// [A-z] A-z中的任意一个字符
// [0-9] 0-9中的任意一个数字
// [^abc] 不在方括号之间的任意一个字符
var patter = /g[^12]gle/;
patter.test("ggle"); // false
patter.test("gogle"); // true
patter.test("g2gle"); // false
patter.test("google"); // false
// \b 一个单词边界
// \B 一个单词非边界
// \d 一个数字
// \D 一个非数字
// \s 匹配任何空白字符,包括空格、制表符、换页符等等。
// \S 匹配任何非空白字符。
// \w 一个单词字符,包括:a-z、A-Z、0-9,以及下划线_ 。 // \W 一个非单词字符

正则表达式速查表 

 

转载于:https://www.cnblogs.com/pumushan/p/6722785.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git 分布式版本控制工具 06在IDEA中使用Git:获取Git仓库+本地仓库操作+远程仓库操作+创建/查看/切换/推送/合并分支操作

在IDEA中使用Git7. 在IDEA中使用Git7.1 在IDEA中配置Git7.2 获取Git仓库7.2.1 本地初始化仓库7.2.2 从远程仓库克隆7.3 Git忽略文件7.4 本地仓库操作7.4.1 将文件加入暂存区7.4.2 将暂存区文件提交到版本库7.4.3 查看日志7.5 远程仓库操作7.5.1 查看远程仓库7.5.2 添加远程仓库…

linux 内核宏container_of剖析

1、前面说的我在好几年前读linux 驱动代码的时候看到这个宏,百度了好久,知道怎么用了,但是对实现过程和原理还是一知半解。container_of宏 在linux内核代码里面使用次数非常非常多,对于喜欢linux编程的同学来说,了解其…

目录树 删除 数据结构_数据结构:B树和B+树的插入、删除图文详解

B树1.1B树的定义B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。一颗m阶的B树定义如下:1)每个结点最…

MMdetection框架速成系列 第01部分:学习路线图与步骤+优先学习的两个目标检测模型代码+loss计算流程+遇到问题如何求助+Anaconda3下的安装教程(mmdet+mmdet3d)

mmdetection 学习目录1 mmdetection 学习建议1.1 mmdetection 学习的第一件事1.2 mmdetection学习路线图1.2.1 优先看的两个库1.2.2 阅读代码1.2.3 代码学习步骤1.2.4 建议优先学习的两个目标检测模型代码1.2.5 loss计算流程的攻坚克难1.3 遇到问题如何求助2 Anaconda3下的安装…

分页查询千万级数据慢

mysql查询千万级数据越来越慢优化: 1.分表:(固定某个表存多少数量的数据:例如:一张表存100w的数据量); 2.优化sql和建立适合的索引(复合索引); 3.使用redis缓存。(redis存一份ID.然后mysql存一份ID每次插入删除的时候同步即可。查询的时候只需要从redis里面找出适合的10个ID,然…

python爬取天气数据山东_Python的学习《山东省各城市天气爬取》

Pythonscrapy爬取山东各城市天气预报1、在命令提示符环境使用pip install scrapy命令安装Python扩展库scrapy,详见Python使用Scrapy爬虫框架爬取天涯社区小说“大宗师”全文2、使用下图中的命令创建爬虫项目3、进入爬虫项目文件夹,执行下面的命令创建爬虫…

Data-structures-and-algorithms-interview-questions-and-their-solutions

https://techiedelight.quora.com/500-Data-structures-and-algorithms-interview-questions-and-their-solutions转载于:https://www.cnblogs.com/zengkefu/p/6724312.html

机器人循迹小车资料

前言 我记得在大学的时候,参加电子比赛,我们有一个题目是平衡小车项目,那个对基础要求还是比较高的,总结了一些平衡车机器的资料,希望对大家有帮助。 正文 关注公众号,回复【机器人资料】获取

单片机实现环形队列_稀疏数组和队列(二)

队列的介绍队列以一种先入先出(FIFO)的线性表,还有一种先入后出的线性表(FILO)叫做栈。教科书上有明确的定义与描述。类似于现实中排队时的队列(队尾进,队头出),队列只在线性表两端进行操作,插入元素的一端称为表尾,删…

draw graph

http://www.icl.pku.edu.cn/member/yujs/bsdfiles/html/mpost.htmlUNIX下绘图面面观http://www.tug.org/metapost.htmlhttp://www.python-course.eu/finite_state_machine.phphttp://www.hahack.com/tools/pgftikz-resources/http://www.bubuko.com/infodetail-2002658.htmlhtt…

漫画-Linux中断子系统综述

1、中断引发的面试教训2、什么是中断?中断: (英语:Interrupt)指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即…

创业究竟有多难?

前几天跟我的一个前同事Y聊天,Y跟我说他们的项目终于拿到了500万的融资,还给我们几个关系好的发了他签约时的照片,照片中的他充满了喜悦与期待,我们好几个关系不错的都知道这些年的他都经历了什么,也许用坎坷来形容都不…

SQL强化(二) 在Oracle 中写代码

一 : 关于查询中的转换 -- 字符串转换 一 : decode 函数 转换 SELECT DECODE ( PROTYPE.PRO_TYPE_DATE, L, 长, m, 短, 默认值 )FROM PROTYPE -- 字符串转换 二 : case 转换 SELECT T1.PRO_TYPE_ID, T1.PRO_TYPE_NAME, CASE T1.PRO_TYPE_DATEWHEN S THEN 短WHEN L THEN 长EL…

vue 非es6 写法怎么按须加载_Vue源码必学指南:flow(语法检查)以及rollup(模板打包)...

点击上方蓝色字关注我们~一、前言虽然 Vue3 已经公开了代码,但是Vue3.0还处于开发阶段,直接上手使用Typescript是不合适的 , 对于前端的老手是不错的选择, 但是如果没有研究源码经验的开发者还是建议使用完善, 成熟的源码进行入手. 而 Vue 2.x 中使用的 flow 是一个…

漫画|创业到底有多难?

我有一群同事,我们一起经历了一个产品从无到有的过程,从开始的斗志满满到最后跟老板的不欢而散,其中的辛酸苦楚也许只能我们自己能体味,在这过程中,我们共同经历过的事情,有快乐的,悲伤的&#…

【LeetCode】053. Maximum Subarray

题目: Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [-2,1,-3,4,-1,2,1,-5,4],the contiguous subarray [4,-1,2,1] has the largest sum 6. 题解: 遍历所…

python怎么数据归一化_基于数据归一化以及Python实现方式

数据归一化:数据的标准化是将数据按比例缩放,使之落入一个小的特定区间,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。为什么要做归一化:1)加快梯度下降求最…

Android面试总结经

自上周怒辞职以后,就開始苦逼的各种面试生涯,生活全然靠私活来接济,时有时没有,真难。还能快乐的玩耍吗。最多一天面试了5家,哎感觉都是不急招人,各种等待通知。好不easy等来一家。还克扣了薪资&#xff0c…

生成step文件_利用opencv给彦女王生成一副蒙太奇画像

大家好呀,前两天烈阳天道1上映了,不知道大家看没看呢,里面还有一小段彦穿越虫洞与猴哥相遇的画面,彦女王啊啊啊~~所以我去网上爬了二百来张我大学的风景画,然后找了以前存的彦女王的图片,生成了一幅蒙太奇画…

浪漫情人节|C语言画心型

1.前言新年第一天上班,先祝大家新年快乐,巧的是,今天刚好又是情人节,所以想了下用C实现画心形符号~过年的时候,跟我表哥去接新娘,实地看了下,如果一个汉字内心没有点浪漫的细胞,很难…