javascript正则表达式(一)——语法
前言
js中类RegExp类表示正则表达式,具有强大的模式匹配、文本检索和替换功能。正则表达式的模式规则是由一个字符序列组成,包括所有字母和数字在内,大多数的字符都是按照直接量匹配字符,某些特殊字符并不按照字面含义匹配字符例如$等,当按照非字面含义匹配时使用需要利用反斜杠转义
可以采用下面两种方式创建RegExp对象:
eg:下面两种方式都可以匹配以s结尾的字符串
//方式一($匹配字符串的结尾),采用构造函数方式
var pattern = new RegExp("s$"); //方式二 ,采用正则表达式直接量的方式,定义在一对斜杠之间的字符
var pattern = /s$/;
注意: 在ECMAScript3中一个正则表达式在执行到它时会转换为一个RegExp对象,同一段代码所表示的正则表达式直接量的每次运算都返回同一个对象(区别于{}和[],每次会创建新的对象),而ECMAScript5中不是
即ECMAScript3中RegExp对象会共享同一个实例,而在ECMAScript5中是两个独立的实例
字符
1、直接量字符
字母和数字字符: 自身 \o: NUL字符 \t: 制表符 \n: 换行符 \v: 垂直制表符 \f: 翻页符 \r: 回车符 ....
2、字符类
将直接量字符放进方括号内组成了字符类,一个字符类可以匹配它所包含的任意字符 eg:/[abc]/可以匹配a、b、c
字符类列表如下:
[....]: 方括号内任意字符 [^...]: 不在方括号内的任意字符 . : 除换行符和其他Unicode行终止符之外的任意字符 \w : 任意ASCII字符组成的单词,等价于[a-zA-Z0-9] \W : 任何不适ASCII字符组成的单词,等价于[^a-zA-Z0-9] \s : 任何Unicode空白符 \S : 任何非Unicode空白符的字符 \d : 任何ASCII数字,等价于[0-9] \D : 等价于[^0-9] [\b] : 退格直接量
重复
/\d\d/可以匹配两个数字,如果位数很多时怎么办呢,可以采用如下方式:
{n}: 匹配前一项n次
{n,}: 匹配前一项n次或者是更多次
{n,m}: 匹配前一项至少n次,至多m次
* : 匹配前一项0次或者多次,等价于{0,}
+ : 匹配前一项1次或者多次,等价于{1,}
? : 匹配前一项0次或者1次(即前一项是可选的)等价于{0,1}
上面这种方式是”贪婪的“匹配,即尽可能多的匹配。如果要”非贪婪的“匹配,可以在匹配的字符后加一个问号。
eg:/a+/ 和 /a+?/, 如果将aaa作为匹配字符串,前一种方式会匹配aaa,后一种方式只会匹配第一个a
当需要匹配aaab时 /a+b/和/a+?b/等价
分组
字符|用于分割供选择的字符,eg /ab|cd|ef/可以匹配字符串 ab或者cd或者ef。
选择项的尝试匹配次序是从左到右,知道发现匹配项,如果左边的选择项匹配就会忽略右边的匹配项,eg /a|ab/ 匹配ab时只能匹配a
圆括号()
圆括号()作用:
1. 将单独的项组合为表达式
eg:/java(script)?/ 可以匹配java或者javascript
2. 在完成模式中定义子模式,当一个正则表达式成功的与目标字符串相匹配时可以从目标串中抽出和圆括号中的子模式相匹配的部分
eg: /[a-z]+(\d+)/ 模式中 /[a-z]+\d+/可以匹配一个或者多个小写字母后加一个和多个数字,那么我们使用()将\d+括起来后,就可以从匹配项中抽取出数字部分。当我们更关心后面的数字时可以使用这种方式
3. 允许在同一正则表达式的后面引用前面的子表达式。 通过在反斜杠\后加一个或者多个数字来实现,这个数字指定了带圆括号的子表达式在正则表达式中的位置
eg1: /(java(script)[abc]+)/ 中(script)可以使用\2来指代
eg2: /[' "][^' "]*[' "]可以使用 /([' "])[^' "]*\1/替代
(?:....)
(?:) 把项组合成一个单元,但是不生成引用,区别于子表达式中的()
eg:在/([Jj]ava(?:[Ss]cript)?)\sis\s(fun\w*)/中 \2与(fun\W*)匹配
锚(指定匹配位置)
锚用于指定匹配表达式出现的合法位置。最常用的锚元素是^用于匹配字符串的开始,锚元素$用于匹配字符串的结束
总结列表:
^ : 匹配字符串的开头,多行检索时用于匹配一行的开头 $ : 匹配字符串的结尾,多行检索时用于匹配一行的结尾 \b: 匹配一个单词的边界(区别于[\b]退格) \B: 匹配非单词边界的位置 (?=p): 正向先行断言,接下来的字符与p匹配 (?!p): 负向先行断言,接下来的字符不与p匹配
举例说明下正向先行断言和负向先行断言:
eg1: /[Jj]ava([Ss]cript)?(?=\:)/ 则改模式能匹配Javascript:is a very interesting language 中的Javascript,但是不能匹配Java is a very interesting language 中的Java
eg2:/Java(?! script)[A-Z]\w*/ 能够匹配Java后跟随一个大写字母和任意多个ASCII单词,但是不能跟随Script
例如它能匹配JavaBeans 不能匹配Javanese
修饰符
修饰符放在"/"之外,下面的修饰符可以任意组合
i:说明匹配模式不区分大小写 g:说明匹配模式时全局的,应该找出所有的匹配,而不是找到第一个就停止 m:多行执行模式,此时^和$除了匹配整个字符串的开始和结尾之外,还能匹配每行的开始和结尾
eg: /\bjava\b/i 可以匹配java Java JAVA等
/JAVA$/im 可以匹配java Java\nis fun
例子
1)邮箱
/^[a-zA-Z0-9_-]+\@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
注意
1.正则表达式中不允许双引号括起来的内容中有单引号,反之亦然.
2.在字符类中不能使用字表达式的引用
eg:/([' "])[^\1]*\1/ 是非法的
相关方法:
javascript正则表达式(一)——语法的更多相关文章
- JavaScript 正则表达式基础语法
前言 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为相当 ...
- JavaScript正则表达式之语法
Regular Expressions翻译成中文叫正则表达式.也不知道是谁翻译过来的,听起来就很严肃.似乎翻译成通用表达式更能传达其精髓. 为什么叫通用表达式?因为它有一套和编程语言无关的文本匹配规则 ...
- JavaScript 正则表达式——基本语法(2)
来源:http://www.cnblogs.com/dolphinX/p/3486214.html 定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> ...
- JavaScript正则表达式下——相关方法
上篇博客JavaScript 正则表达式上——基本语法介绍了JavaScript正则表达式的语法,有了这些基本知识,可以看看正则表达式在JavaScript的应用了,在一切开始之前,看看RegExp实 ...
- javascript正则表达式语法
1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的 ...
- JavaScript 正则表达式上——基本语法
定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...
- javascript正则表达式(RegExp)简述
首先我们来思考以下两个个场景 我们使用window操作系统,有时候需要找一个文件,刚刚好这个文件我不知道放哪里去了,这个时候我们该怎么办呢? 我们使用word写论文的时候,不小心将"订价&q ...
- JavaScript正则表达式详解(一)正则表达式入门
JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...
- 5分钟教你学会JavaScript正则表达式
正则表达式在实际开发过程中和技术面试过程中的重要性不言而喻,本文仅仅只是教你如何在几分钟之类学会正则表达式,对于它的原理及运行机制不做介绍. 第一:什么是正则 正则表达式是一种用来描述一定数量文本的模 ...
随机推荐
- SEO为什么越来越难?
不是很长的折腾seo该,无脑想如何很长的头发外链,一方面,没有花费的时间SEO在,另一方面SEO越来越难,的另一个方面,也SEO特征,不可控和不可预测性,致使我们花了非常多的情况下,SEO大部分时间都 ...
- win7 32/64bit VS2010 OpenCV 2.4.9 环境配置
作者 : 卿笃军 因为近期人脸识别须要用到OpenCV,让我開始了OpenCV学习. OpenCV 2.4.9下载地址:http://sourceforge.net/projects/opencvli ...
- 关于Xcode的Other Linker Flags
背景 在ios开发过程中,有时候会用到第三方的静态库(.a文件),然后导入后发现编译正常但运行时会出现selector not recognized的错误,从而导致app闪退.接着仔细阅读库文件的说明 ...
- vim中选择匹配文本删除技巧
试举几例如下: 如何只保留匹配内容行而删除其他行? :v/pattern/d :help :v 如何对每行只保留匹配内容而删除这一行中的其它内容 :%s/^.pattern.$/\1/g 删除包含特定 ...
- codevs 2541 幂运算(迭代加深搜索)
/* 一开始想到了简单的深搜 维护当前可用的mi数组 然后回溯用哪个 不断更新新产生的mi 这样的问题是 由于mi不断产生 搜索规模扩大 不好 不好 下面是奇丑的WA掉的代码 做个反面教材 */ #i ...
- Spring.Net+NHibernate+asp.net mvc + easyui
毕业4个月的入手项目..前段时间在公司一直做的维护..为了弄明白自己也就跟着写了一个,目前也正在学习:不对的或者是有更好的还请各位赐教. 在学习的过程中主要参考::http://www.cnblogs ...
- phonegap 2.8.1 toast
目录结构如下: 以上三个用红色框勾出的地方是需要修改的文件夹. 首先:添加java代码. 在src目录下新建一个包裹:org.apache.cordova 在该包裹下新建类:ToastPlugin.j ...
- javascript 获取用户光标,插入文本
图1 如图1所示,点击[函数名称],将函数名称添加到表达式内容框中,点击参数名称,将参数名称index1作为方法的参数添加到表达式内容中的表达式中. 该功能实现主要是采用了javascript获取鼠标 ...
- mysql set names.
SET NAMES utf8 相当于 SET character_set_client = utf8 --用来设置客户端送给MySQL服务器的数据的 字符集 SET character_set_res ...
- DOM中的node与element的区别
先看document的两个常见method. document.createTextNode Constructor: Text document.createElement Constructor: ...