Regular Expression学习笔记
正则写法
var re = /a/;//简写
/.../里不能为空,因为会误以为是注释;
var re = new RegExp('a');
新建一个RegExp
对象;和新建Array对象,Object对象一样,有简写;
平时建议用简写,因为简写的性能更好;
但如果正则表达式里有非类字符串的类型(其实并不是字符串,只能不知怎么表述),则不能简写,因为/.../里写的只能类字符串类型;
var arr = [];
var arr = new Array();
var obj = {};
var obj = new Object();
正则常用方法
test()
test()
: 正则去匹配字符串,如果匹配成功就返回真,如果匹配失败就返回假
语法:正则.test(字符串)
var str = 'abcdef';
var re = /b/;
alert( re.test(str) ); //true
search()
search()
: 正则去匹配字符串 , 如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回 -1,和indexof()
差不多
语法:字符串.search(正则)
正则默认是区分大小写的;
如果不区分大小写的话,需要在正则的最后加标识i
var str = 'abcdef';
var re = /B/i;
//var re = new RegExp('B','i');
alert( str.search(re) );
match()
match()
: 正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null
语法:`字符串.match(正则)
正则默认匹配成功就会结束,不会继续匹配
如果想全部查找,就要加标识 g(全局匹配)`
replace()
replace()
: 正则去匹配字符串,匹配成功的字符去替换成新的字符串
语法:字符串.replace(正则,新的字符串)
第二个参数:可以是字符串,也可以是一个回调函数
var str = 'aaa';
var re = /a+/g;
str = str.replace(re,function(str){
return str;
//回调函数的第一个参数:就是匹配成功的字符
});
alert(str);
匹配子项
小括号 () (还有分组操作的意思)
把正则的整体叫做(母亲)
第一个小括号里面的正则,叫做这个第一个子项(母亲的第一个孩子),第二个小括号就是第二个子项
var str = '2013-6-7';
var re = /(\d+)(-)/g;
str = str.replace(re,function($0,$1,$2){
//第一个参数:$0(母亲),第二个参数 : $1(第一个孩子),第三个参数 : $2(第二个孩子)
return $1 + '.';
});
alert( str ); //2013.6.7
match()
中也有匹配子项
var str = 'abc';
var re1 = /abc/;
var re2 = /(a)(b)(c)/;
alert( str.match(re1) ); //abc
alert( str.match(re2) ); //[abc,a,b,c]
//当match不加g的时候才可以获取到子项的集合
字符类
一组相似的元素,用 [] 中括号的整体代表一个字符,如果想代表多个,则在[]
后面加上一个+
;
var str1 = 'abc';
var str2 = 'abdc';
var re1 = /a[bde]c/;//bde是或的关系
var re2 = /a[bde]+c/;//
alert( re1.test(str1) ); //true
alert( re1.test(str2) ); //false
alert( re2.test(str2) ); //true
排除 ^
: 如果^
写在[]
里面的话,就代表排除的意思
[]
里面还可以写一个范围,但是要从小到大;
var re = /a[a-z0-9A-Z]c/;
常见元字符
.
: 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像"(.|\n)"的模式。
^
: 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置
$
: 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置
\s
: 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
\S
: 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
\d
: 匹配一个数字字符。等价于 [0-9]
\D
: 匹配一个非数字字符。等价于 [^0-9]
\w
: 匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_]
( 字母 ,数字,下划线_ )
\W
: 匹配任何非单词字符。等价于 [^A-Za-z0-9_]
\b
: 匹配一个单词边界(起始,结束,空格),也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'
\B
: 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'
\r
: 匹配一个回车符。等价于 \x0d
和 \cM
\t
: 匹配一个制表符。等价于 \x09
和 \cI
\num
: 匹配 num,其中 num 是一个正整数。对第num个子项的引用。例如,'(.)\1' 匹配两个连续的相同字符。
量词类:
*
: 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}
+
: 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}
?
: 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}
{n}
: n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o
{n,}
: n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'
{n,m}
: m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格
?
: 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
更多内容看 正则表达式-元字符表
常用表单校验
匹配中文:[\u4e00-\u9fa5]
行首行尾空格:^\s*|\s*$
Email:^\w+@[a-z0-9]+(\.[a-z]+){1,3}$
网址:[a-zA-z]+://[^\s]*
QQ号:[1-9][0-9]{4,9}
邮政编码:[1-9]\d{5}
身份证:[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x
可以把这些正则放到一个空间里,调用起来方便;
var re = {
qq : /[1-9][0-9]{4,9}/,
email : /[1-9]\d{5}/,
...
}
需要时就调相应的正则:
re.qq.test(str);
Regular Expression学习笔记的更多相关文章
- 正则表达式-Regular expression学习笔记
正则表达式 正则表达式(Regular expression)是一种符号表示法,被用来识别文本模式. 最近在学习正则表达式,今天整理一下其中的一些知识点 grep - 打印匹配行 grep 是个很强大 ...
- Introducing Regular Expressions 学习笔记
Introducing Regular Expressions 读书笔记 工具: regexbuddy:http://download.csdn.net/tag/regexbuddy%E7%A0%B4 ...
- 《Linux命令行与shell脚本编程大全》 第二十七章 学习笔记
第二十七章:shell脚本编程进阶 监测系统统计数据 系统快照报告 1.运行时间 uptime命令会提供以下基本信息: 当前时间 系统运行的天数,小时数,分钟数 当前登录到系统的用户数 1分钟,5分钟 ...
- AngularJs学习笔记--expression
原版地址:http://code.angularjs.org/1.0.2/docs/guide/expression 表达式(Expressions)是类Javascript的代码片段,通常放置在绑定 ...
- WPF学习笔记-用Expression Design制作矢量图然后导出为XAML
WPF学习笔记-用Expression Design制作矢量图然后导出为XAML 第一次用Windows live writer写东西,感觉不错,哈哈~~ 1.在白纸上完全凭感觉,想象来画图难度很大, ...
- 【Python学习笔记】Coursera课程《Using Python to Access Web Data 》 密歇根大学 Charles Severance——Week2 Regular Expressions课堂笔记
Coursera课程<Using Python to Access Web Data > 密歇根大学 Charles Severance Week2 Regular Expressions ...
- 【leetcode刷题笔记】Regular Expression Matching
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- spring in action 学习笔记十三:SpEL语言(Spring Expression Language)
SpEl语言的目的之一是防止注入外部属性的代码硬代码化.如@Value("#{student.name}")这个注解的意思是把Student类的name的属性值注入进去.其中stu ...
- 学习笔记之正则表达式 (Regular Expressions)
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
随机推荐
- 51nod2004 终结之时 (支配树+树剖+树链的并)
link 我永远喜欢洛天依 给定一张图世末积雨云,你需要维护其支配树: 单点修改,子树修改,树链修改 子树求和,树链求和,多条树链的并集求和 撤销之前的操作 可以先用 Lengauer-Tarjan ...
- ES6(二) 函数
箭头函数 是简写,不要function 1.如果有且仅有一个参数,()可以不写 2.如果有且仅有一条语句,而且是return,{}也可以不写 let arr=[12,23,5,6] // arr.so ...
- LTE
LTE (telecommunication), Long Term Evolution, a telephone and mobile broadband communication standar ...
- amqp模块在python2.7.6版本上报错的问题
机器的环境是python2.7.6; 使用pip install安装了amqp.正常安装,未报错. amqp安装的版本是2.1.4. 在python中,使用import amqp,报错如下: Trac ...
- CentOS 6.5中配置RabbitMQ
先配置erlang依赖环境 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel 安装erlang 1 ...
- 使用BeanUtils封装数据时数据类型的转换
//获得表单数据 Map<String, String[]> properties = request.getParameterMap(); User user = new User(); ...
- leetcode简单题目两道(1)
Problem: You are playing the following Nim Game with your friend: There is a heap of stones on the t ...
- IE浏览器报Promise未定义
用vue-cli做的项目,用了promise,结果IE下报promise未定义,甚至在比较老的andriod手机浏览器上会显示空白页面,解决方案如下: 首先安装:babel-polyfill npm ...
- Appium移动端自动化测试-安卓真机+模拟器启动
一.环境准备 appium-pythin-client版本(0.17),selenium版本(2.53.6)(版本需对应,否则执行脚本可能出错,我用的是这两个版本) macOs版本10.14.1(ap ...
- bzoj 4942: [Noi2017]整数
Description Solution 加法减法可以分开考虑,如果只有加法的话,直接暴力进位复杂度是对的 询问的时候就是把两个二进制数做差,判断第 \(k\) 位的取值 实际上我们只需要判断 \(1 ...