RegExp正则匹配模式汇总
正则表达式提供另一种强大的文本搜索和处理方式,对于正则表达式,不同语言有着不同的实现,JavaScript采用的Perl5的语法。对于极少数匹配模式是简单的全字符文本的情况,我们往往会采用indexOf这样的方法,但是多数情况下,匹配模式往往都更为复杂。
1、语法
1)在JavaScript中我们可以采用内建构造器RegExp()来创建正则表达式的对象;
var re = new RegExp("j.*t")
2)当然除了使用RegExp对象,我们可以采用更为简便的正则文本标记法
var re = /j.*t/
2、RegExp对象属性
1、global: 是否打开全局搜索(默认是false,只匹配到第一个)
2、ignoreCase: 设置大小写相关性
3、multiline: 设置是否跨行搜索
4、lastIndex:搜索的开始索引位置,默认为0
5、source: 用于存储正则表达式的匹配模式
除了laseIndex外,上面所有属性在设置之后都不再被修改,也就是说:
var re = /j.*t/ig;
re.global // true;
re.global = false;
re.global // true;
3、RegExp对象的方法
RegExp对象中有两种方法可用于查找匹配内容的方法:test()和exec()。这两种方法的参数都是一个字符串,test()方法返回的是一个布尔值、而exec()返回的由匹配到字符串所组成的数组。
/j.*t/.test("JavaScript"); //false
/j.*t/i.test("JavaScript"); //true
/j.*t/i.exec("JavaScript")[0]; //"JavaScript"
以正则表达式为参数的字符串的方法
1)match() 返回一个包含匹配内容的数组
2)search() 返回的是第一个匹配内容的所在位置
3)replace() 能将匹配的文本替换程指定字符串
4)split() 根据正则分割若干个数组元素
match()方法
var s = new String('HelloJavaScriptWorld');
s.match(/a/) //["a"]
s.match(/a/g) // ["a","a"]
s.match(/j.*a/i) // ["Java"]
search()方法
search方法会返回匹配字符串的索引位置(从0开始)
s.search(/j.*a/i); //5
replace()方法
replace用于将匹配的文本替换掉
s.replace(/[A-Z]/g,'_$&'); //_Hello_JavaScript_World
①$&保留原来匹配对象并在前面加_
②&1表示匹配的第一组以此类推
split()方法
var csv = "one,two,three,four";
csv.spilt(/\s*,\s*/); //["one","two","three","four"]
①\s*用于匹配0个或者多个空格
4、回调式替换
当我们需要执行一些特定的替换操作时,也可以通过返回字符串的函数来完成。
var global;
var callback = function () {
global = argumens;
return argumens[1] + 'a' + argumens[2] + 'dot' + arguments[3];
}
var re = /(.*)@(.*)\.(.*)/;
"OkayChen@cnblogs.com".replace(re,callback); //OkayChen at cnblogs dot com
5、正则匹配模式
| 匹配模式 | 相关说明 |
| [abc] |
匹配的字符类信息 > "Some Text".match(/[otx]/g); //['o','t','x','t']; |
| [a-z] |
[a-z]就相当于[abcd],[a-z]就表示我们要匹配所有的小写字母,而[a-zA-Z0-9_]就是匹配所有的 字母、数字及下划线 > "Some Text".match(/[a-z]/g); //['o','m','e','e','x','t']; |
| [^abc] |
匹配所有不属于限定范围内的字符 > "Some Text".match(/[^a-z]/g); //['S','','T']; |
| a|b |
这里匹配的是a或者b > "Some Text".match(/t|T/g); //['T','t']; |
| a(?=b) |
匹配所有后面跟着b的a的信息 > "Some Text".match(/Some(?= Tex)/g); //["some"] > "Some Text".match(/Some(?=Tex)/g); //null |
| a(?!b) |
匹配所有后面不跟着b的a的信息 > "Some Text".match(/Some(?!Tex)/g); //["some"] > "Some Text".match(/Some(?! Tex)/g); //null |
| \ |
反斜杠主要用于帮助我们匹配一些模式文本中的特殊字符 > "R2-D2".match(/[2\-3]/g); //["2","-","2"] |
|
\n \r \f \t \v |
换行符 回车符 换页符 横向制表符 纵向制表符 |
| \s |
这是匹配的空白符,包含上面五个转义字符 > "R2\n D2".match(/\s/g); //["n",""] |
| \S | 匹配除空白符以外的内容,就相当于 [^\s] |
| \w | 匹配所有的字母、数字和下划线,相当于 [A-Za-z0-9_] |
| \W | 刚好与\w相反 |
| \d | 匹配所有的数字类信息 相当于 [0-9] |
| \D | 刚好与\d相反 |
| \b | 匹配一个单词的边界,例如空格和标点符号 |
| \B | 刚好与\b相反 |
| [\b] | 匹配的是退格键符(Backspace) |
| \0 | 这里匹配的是null |
| \uoooo |
这里匹配的是一个unicode字符,并且是一个四位16进制数来表示, > "CTOH".match(/\u0441\u0442\u943E/) //["CTO"] |
| \x00 |
这里匹配的是一个字符,该字符的编码是一个两位十六进制数来表示的 > "dude".match(/x64/g); // ["d","d"] |
| ^ | 匹配字符串的开头部分,如果设置了m,那就是匹配每一行的开头 |
| $ | 匹配字符串的结尾部分,如果设置了m,那就是匹配每一行的结尾 |
| . | 这里 匹配的是除了换行符以为的任何字符 |
| * | 这里匹配的是模式中间出现0次或者多次的内容。例如/.*/可以匹配任何内容 |
| ? |
匹配模式中间出现0次或者1次的内容 > "anything".match(/ng?/g); //["ng","n"] |
| + |
这里匹配的是模式中间至少出现一次或者多次的内容 > "R2-D2" and C-3PO".match("/[a-z+/gi"); //["R","D","and","C","po"] |
| {n} |
匹配模式中出现n次的内容 > "regular expression".match(/\b\w{3}/g); //["reg","exp"] |
| {min,max} |
匹配模式中间出现次数在min和max之间的信息 ,如果省略了max,则意味着没有最多次数 > "goooooooooole".match(/o{2 , }/g); //["oo","oo","oo","oo","oo"] |
| (pattern) |
捕获模式 > "regular expression".match(/(r)/g , '$1$1' ); //rregularr exprression > "regular expression".match(/(r)(e)/g , "$2$1"); //ergular expression |
| (?:pattern) |
这不是捕获模式,不能用$1,$2等参数来记录匹配串 > "regular expression".match(/(?:r)(e)/g , '$1$1' ); //eegular expeession |
上面是《JavaScript面向对象编程指南》附录中30种正则匹配模式,可以分为直接量字符、字符类、复制、选择引用分组、以及指定匹配的位置。
其中有一些等价关系的存在、比如
\w就相当于[A-Za-z0-9_],
\d相当于[0-9],
\D就相当于[^0-9]或[^\d]
记录这篇正则匹配模式,希望以后自己在用到有需要可以及时翻阅。
RegExp正则匹配模式汇总的更多相关文章
- MySQL全面瓦解8:查询的正则匹配
概述 上一章 查询的过滤条件,我们了解了MySQL可以通过 like % 通配符来进行模糊匹配.同样的,它也支持其他正则表达式的匹配,我们在MySQL中使用 REGEXP 操作符来进行正则表达式匹配. ...
- sublim的正则匹配(待续)
ctrl+H 打开匹配模式 打开正则匹配模式 正则匹配的一些方法: 点代表的是任意字符.* 代表的是取 0 至 无限长度问号代表的是非贪婪模式.三个链接在一起是取尽量少的任意字符,一般不会这么单独写 ...
- REGEXP 正则的实现两个字符串组的匹配。(regexp)
主要懂3个mysql的方法:replace[替换] regexp[正则匹配] concat[连接] 由于某些原因,有时候我们没有按照范式的设计准则而把一些属性放到同一个字符串字段中.比如 ...
- 正则匹配与替换 regexp & regsub
正则匹配是使用正则表达式匹配字符串的一种方法:在脚本编写过程中,经常需要处理一些文本,而这些文本中可能只有部分信息是有用的,我们需要从文本中提取出这些有用信息:这时候,就需要编写特定格式的正则表达式, ...
- 第11.16节 Python正则元字符“()”(小括号)与组(group)匹配模式
一. 什么是组 关于组匹配模式,Python官网上说得比较简单,也没有这个名词,只有组这个名词,老猿查了比较多的资料和做了相关测试之后才理解. 组匹配模式,就是在匹配的正则表达式中使用小括号" ...
- 20170624xlVBA正则分割分类汇总
Sub RegExpSubtotal() '声明变量 Dim Regex As Object '正则对象 Dim Dic As Object '字典对象 Dim Key As String '关键字 ...
- RegExp正则校验之Java及R测试
前言: 正则表达式(英语:Regular Expression)原属于计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里边,正则表达式通常被用 ...
- Aho-Corasick算法、多模正则匹配、Snort入门学习
希望解决的问题 . 在一些高流量.高IO的WAF中,是如何对规则库(POST.GET)中的字符串进行多正则匹配的,是单条轮询执行,还是多模式并发执行 . Snort是怎么组织.匹配高达上千条的正则规则 ...
- 正则匹配<img src="xxxxxx" alt="" />标签的相关写法
1.(<img\ssrc[^>]*>) 2.content.replace(/<img [^>]*src=['"]([^'"]+)[^>]*&g ...
随机推荐
- zabbix之自动发现Tomcat多实例(第一种:已经部署完成,后续不再添加;第二种:后续或根据需要添加Tomcat实例)
单一实例手动部署:https://www.cnblogs.com/huangyanqi/p/8522526.html 注释:参考的一位博主的博客后续做的修改,那个博主的网址找不到了!!!! 背景: 1 ...
- [T-ARA][yayaya]
歌词来源:http://music.163.com/#/song?id=22704449 U look at me Right T-ARA U Ready Let me seeya LaLaLaLa ...
- hihocoder Round #c1(hihoCoder太阁最新面经算法竞赛1 )
Test链接:https://cn.vjudge.net/contest/231849 选自hihoCoder太阁最新面经算法竞赛1 更多Test:传送门 A:区间求差 给一组区间集合A和区间集合B, ...
- 算法题:整形数组找a和b使得a+b=n
题目: 数组 A 由 1000 万个随机正整数 (int) 组成,设计算法,给定整数 n,在 A 中找出 a 和 b,使其符合如下等式: n = a + b 解题思路: 1. 1000w个随机正整数占 ...
- wk_06.md
IO与文件操作 文件内建函数open 内建函数open提供了初始化输入/输出(I/O)操作的通用接口.open()内建函数成功打开文件后会返回一个文件对象.open函数的语法如下: open(file ...
- Hadoop学习之路(二)Hadoop发展背景
Hadoop产生的背景 1. HADOOP最早起源于Nutch.Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取.索引.查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题—— ...
- React 入门学习笔记2
摘自阮一峰:React入门实例教程,转载请注明出处. 一.获取真实的DOM节点 组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM).只有当它 ...
- Linux搜索查找命令
Linux搜索查找指令 find,用于在文件树中查找文件并作相应的处理 -name:按照文件名查找文件 -perm:按照文件权限查找文件 -user:按照文件属主来查找文件 -size:按照指定的文件 ...
- 2.编写实现:有一个三角形类Triangle,成员变量有底边x和另一条边y,和两边的夹角a(0<a<180),a为静态成员,成员方法有两个:求面积s(无参数)和修改角度(参数为角度)。 编写实现: 构造函数为 Triangle(int xx,int yy,int aa) 参数分别为x,y,a赋值 在main方法中构造两个对象,求出其面积,然后使用修改角度的方法,修改两边的夹角,再求出面积值。(提示
求高的方法 h=y*Math.sin(a) 按题目要求,需要我们做的分别是:1.改角度2.显示角度3.求面积并显示 代码用到:1.静态成员变量以修改角度2.数学函数 以下具体代码具体分析 import ...
- [外观] Firemonkey Windows Hint 气球样式
Firemonkey 在 Windows 平台下的 Hint 默认为距形,有些单调,现在只要加入一行代码,就可以有气球箭头样式的 Hint. 修改代码: 请将 FMX.Controls.Win.pas ...