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 ...
随机推荐
- OpenFire 安装及配置
下载 添加的属性为:EXE4J_JAVA_HOME,其属性的值为32位的JDK的所在位置. 2,openfire的启动路径中不能含有中文,好多java写的都是这个样. 3,如果安装的了 Jav ...
- 关于云主机Thinkphp框架Session跨页失效的问题
在网站部署到云主机之后,前台一直能够正常显示,后台确登录不上去,验证码也无法显示,研究半天,才确定是Session跨页传递失效的问题.找网上各种解决方法,都是关于Php.ini文件的设置,可又解决不了 ...
- EndNote同步功能<Sync>
EndNote的同步功能Sync可以把本地文献和网络云文献进行同步,如何进行同步,同步过程中需要注意什么,本文就EndNote的同步功能Sync作一图文说明. 一直对EndNote的同步功能Sync不 ...
- 进阶篇:4.3)DFA设计指南:防错设计( 防呆设计)
本章目的:每一个装配步骤都有设计防错. 1.前言 关于防错设计,作者有想说的话: 1)防错设计是DFA重要的一条.因为太过重要,作者单独开一分章写! 2)只有理解了设计防错的重要,才会去设计防错特征. ...
- 洛谷 P4248 / loj 2377 [AHOI2013] 差异 题解【后缀自动机】【树形DP】
可能是一个 SAM 常用技巧?感觉 SAM 的基础题好多啊.. 题目描述 给定一个长度为 \(n\) 的字符串 \(S\) ,令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀,求: \[ ...
- adb的常用命令及如何查看被占用的端口
adb是什么?:adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具.a ...
- JobScheduler布置后台任务以及实现进程保活?
1.简介 在Android 5.0 提供了一套新的 JobScheduler API,它允许您定义要在以后的某个时间或在指定的条件下(例如,当设备在充电时)异步运行的作业来优化电池寿命. https: ...
- Java Web基础——Controller+Service +Dao三层的功能划分
转自:https://www.cnblogs.com/cielosun/articles/5752272.html 1. Controller/Service/DAO简介: Controller是管理 ...
- 文献综述十四:基于Oracle11g的超市进销存管理系统设计与实现
一.基本信息 标题:基于Oracle11g的超市进销存管理系统设计与实现 时间:2016 出版源:技术创新 文件分类:对数据库的研究 二.研究背景 为超市设计开发的超市管理系统,采用的是 VC+ Or ...
- C# 获取类名
1.获取C#类中类名 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name; 2.获取C#类中类名(包含命名空间) Sy ...