正则表达式的2种定义方法:一种是直接调用RegExp(),第二种是直接用字面量来定义,即var re = /正则规则/;

2种定义方法本质都是调用RegExp()方法

在调用同一段正则代码的时候,ECMAScript3和ECMAScript5中表现完全不一样

function reg(){
var re = /\sjavascript/;
return re;
}

分别在ECMAScript3和ECMAScript5中调用reg()方法多次

在ECMAScript3中,调用的是同一个RegExp对象,在ECMAScript5中,调用的是不同的RegExp对象 因为在EXCMAScript5中每执行一次,就生成一个新的RegExp对象

所以在ECMAScript3中会造成程序的隐患,因为只要在一个地方对这个对象进行修改的话,所有调用到这个对象的地方都会变化。

1.直接量字符

在正则中一般都会直接匹配字符,如

/javascript/

会直接匹配字符javascript

还支持非字母的字符匹配,如:

\o    NUL字符(\u0000)

\t    制表符(\u0009)

\n    换行符(\u000A)

\v    垂直制表符(\u000B)

\f    换页符(\u000C)

\r    回车符(\u000D)

\xnn   由十六进制数nn指定的拉丁字符,例如,\x0A等价于\n

\uxxxx 由十六进制数xxxx指定的Unicode字符,例如\u0009等价于\t

\cX   控制字符^X,例如,\cJ等价于换行符\n

在正则表达式中,还有一些有特殊含义的标点符号,他们需要'\'来转义

^$.*+?=!:|\/()[]{}

2.字符类

[...]               方括号内的任意字符

[^...]    不在方括号内的任意字符

.        任意字符

\w      任何ASCII字符组成的单词,等价于[a-zA-Z0-9]

\W       任何不适ASCII字符组成的单词,等价于[^a-zA-Z0-9]

\s      任何Unicode空白符

\S      任何非Unicode空白符的字符,注意\w和\S不一样

\d      任何ASCII数值,等价于[0-9]

\D      除了ASCII数字之外的任何字符,等价于[^0-9]

[\b]     退格直接量(特例)

3.重复(次数)

?    0或1次

+    1次或多次

*    任意次

{n}        n次

{m,n}     最少m次,最多n次

{n,}       n次或n次以上

正则默认是贪婪匹配的

如[a+b+]      如果要匹配aaabb,它不会匹配ab和aab等,只会匹配aaabb

[a+?b+?]       这个会匹配aaab   为什么会产生这个区别呢?

答:+?是让正则非贪婪匹配,那么b这里只会匹配一个b,那为什么a会匹配3个呢?这是因为正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置。

4.选项|分组|引用

|        用于分隔可供选择的字符,如[ab|cd],他既可以匹配ab也可以匹配cd,注意:选择项的尝试匹配次序是左→右,因此[a|ab],当a匹配通过了之后,就不匹配ab了,就算ab是更好的匹配

()        1.单独的项当成子表达式    /java(script)?/     可以匹配javascript和java   即圆括号部分形成子的表达式,可以对子表达式执行| * ?等操作

         2.完整的模式中定义子模式   后面的可以引用前面圆括号起来的表达式   /(['"])[a-z]\1/     \1引用的是第一个圆括号里的表达式,因此引用了['"]

         3.后部引用前面的子表达式  注意: /['"][a-z]['"]/这个正则的意思是     单引号或双引号加上一个小写字母加上一个单引号或者双引号,前后的单双引号不是匹配的

                                              如果你要匹配可以这么写[(['"])[a-z]\1]

\加数字     可以引用前面圆括号中的表达式    

5.制定匹配位置(锚点)

^    匹配字符串的开头,在多行检索中,匹配一行的开头

$    匹配字符串的结尾,在多行检索中,匹配一行的结尾

\b    匹配一个单词的边界,简言之,就是位于字符\w和\W之间的位置,或位于字符\w和字符串的开头或者结尾之间的位置

\B    匹配非单词边界的位置

(?=p)   零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符

(?!p)  零宽负向先行断言,要求接下来的字符不与p匹配

6.修饰符

写在正则表达式字面量//右侧的

i        执行不区分大小写的匹配

g        执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止

m       多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束    /java$/m   可以匹配  java\nfunc

注意:当正则表达式是全局的时候,每次exec() 和 test()的时候都会把当前设置的lastIndex设为当前的位置,再次执行的时候就会从lastIndex的位置开始执行,因此最好每次执行的时候lastIndex设置为0

javascript正则表达式定义(语法)的更多相关文章

  1. JavaScript 正则表达式基础语法

    前言 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为相当 ...

  2. javascript正则表达式(一)——语法

    前言 js中类RegExp类表示正则表达式,具有强大的模式匹配.文本检索和替换功能.正则表达式的模式规则是由一个字符序列组成,包括所有字母和数字在内,大多数的字符都是按照直接量匹配字符,某些特殊字符并 ...

  3. JavaScript正则表达式之语法

    Regular Expressions翻译成中文叫正则表达式.也不知道是谁翻译过来的,听起来就很严肃.似乎翻译成通用表达式更能传达其精髓. 为什么叫通用表达式?因为它有一套和编程语言无关的文本匹配规则 ...

  4. JavaScript 正则表达式——定义,目的,特点,语法,字符串方法,search() ,replace() ,test(),exec()

    ㈠什么是正则表达式? ⑴正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.    正则表达式通常被用来检 ...

  5. JavaScript 正则表达式——基本语法(2)

    来源:http://www.cnblogs.com/dolphinX/p/3486214.html 定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%>  ...

  6. JavaScript正则表达式-定义

    通过RegExp()构造函数创建RegExp对象来定义正则表达式. var reg_pattern = new RegExt("a\d"); 通过字面语法直接定义正则表达式. va ...

  7. JavaScript正则表达式下——相关方法

    上篇博客JavaScript 正则表达式上——基本语法介绍了JavaScript正则表达式的语法,有了这些基本知识,可以看看正则表达式在JavaScript的应用了,在一切开始之前,看看RegExp实 ...

  8. javascript正则表达式语法

    1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的 ...

  9. JavaScript 正则表达式上——基本语法

    定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...

随机推荐

  1. LeetCode OJ:Search in Rotated Sorted Array II(翻转排序数组的查找)

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  2. Python的集合框架

    Python内置了四种集合框架(list.tuple.dict.set) list:list是一种有序的集合 list里面的元素的数据类型也可以不同,list元素也可以是另一个list In [28] ...

  3. Spring核心思想——IOC和DI

    基本概念 IOC是什么?     IOC(Inversion of Control)控制反转,IOC是一种新的Java编程模式,目前很多轻量级容器都在广泛使用的模式. IOC解决了什么问题?      ...

  4. zookeeper数据一致性与paxos算法

    数据一致性与paxos算法 据说Paxos算法的难理解与算法的知名度一样令人敬仰,所以我们先看如何保持数据的一致性,这里有个原则就是: 在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执 ...

  5. 利用xcopy在复制文件或文件夹的时候保留其权限

    当用 Windows Explorer 复制或移动文件和文件夹时,文件或文件夹上设置的权限可能会发生改变.例如,当在一个 NTFS文件系统卷内或在两个 NTFS 卷之间复制一个文件时,Windows将 ...

  6. 课堂/会议同屏教学解决方案之RTSP/RTP over UDP组播解决方案

    问题 在之前的博客<EasyIPCamera实现Windows PC桌面.安卓Android桌面同屏直播,助力无纸化会议系统>我们描述了一套基于EasyIPCamera的同屏功能,但是这个 ...

  7. Java内存模型的深入理解

    基础 并发编程的模型分类 在并发编程需要处理的两个关键问题是:线程之间如何通信 和 线程之间如何同步. 通信 通信 是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信机制有两种:共享内存 ...

  8. Linux libusb 安装及简单使用

    Linux libusb 安装及简单使用 一.参考文档: . libusb1 fails do_configure task with “udev support requested but libu ...

  9. CXF生成本地ws调用代码测试webservice

    package com.free.webservice.client; import java.util.List; import cn.com.webxml.*; public class Weat ...

  10. 【测试技术】websocket-client

    Websocket Client 继续上周的议题.因为我不会写go,不会写websocket客户端,导致整个测试过程我是个完美的酱油党.上周我终于把客户端服务写好了. 选择Websokcet框架 现在 ...