javascript正则表达式定义(语法)
正则表达式的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正则表达式定义(语法)的更多相关文章
- JavaScript 正则表达式基础语法
前言 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为相当 ...
- javascript正则表达式(一)——语法
前言 js中类RegExp类表示正则表达式,具有强大的模式匹配.文本检索和替换功能.正则表达式的模式规则是由一个字符序列组成,包括所有字母和数字在内,大多数的字符都是按照直接量匹配字符,某些特殊字符并 ...
- JavaScript正则表达式之语法
Regular Expressions翻译成中文叫正则表达式.也不知道是谁翻译过来的,听起来就很严肃.似乎翻译成通用表达式更能传达其精髓. 为什么叫通用表达式?因为它有一套和编程语言无关的文本匹配规则 ...
- JavaScript 正则表达式——定义,目的,特点,语法,字符串方法,search() ,replace() ,test(),exec()
㈠什么是正则表达式? ⑴正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念. 正则表达式通常被用来检 ...
- JavaScript 正则表达式——基本语法(2)
来源:http://www.cnblogs.com/dolphinX/p/3486214.html 定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> ...
- JavaScript正则表达式-定义
通过RegExp()构造函数创建RegExp对象来定义正则表达式. var reg_pattern = new RegExt("a\d"); 通过字面语法直接定义正则表达式. va ...
- JavaScript正则表达式下——相关方法
上篇博客JavaScript 正则表达式上——基本语法介绍了JavaScript正则表达式的语法,有了这些基本知识,可以看看正则表达式在JavaScript的应用了,在一切开始之前,看看RegExp实 ...
- javascript正则表达式语法
1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的 ...
- JavaScript 正则表达式上——基本语法
定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...
随机推荐
- Markdown_04_折叠语法
目录 一.折叠语法 参考资料 一.折叠语法 主要使用的是 html5的 details标签 (1)示例如下: <details> <summary>折叠文本</summa ...
- MySQL20个经典面试题
MySQL20个经典面试题 Part2:经典题目 1.MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联: 2.MySQL中myisam与innodb的区别,至少5点 (1).问5点不 ...
- LeetCode OJ:Gas Station(加油站问题)
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...
- LeetCode OJ:Number of 1 Bits(比特1的位数)
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also know ...
- 让nodejs在iis上运行
node在IIS上运行的好处: Tomasz的回答是我见过最棒的: 使用iisnode模块在IIS中托管node.js应用程序来取代自托管node.exe进程的优势在于: · 进程管理. Iisnod ...
- 文件目录tree显示,python
#/usr/bin/python import os def travelTree(currentPath, count=0): if not os.path.exists(currentPath): ...
- New Concept English three(15)
31w/m 43 Children always appreciate small gifts of money. Father, of course, provides a regular supp ...
- 转:java c/s tomcat 三层架构
概述在c/s结构的发展历程中,产生了两层c/s结构和三层c/s结构之分.在两层c/s结构中,在信息管理系统的管理上主要分为客户端和数据库服务器. 缺点有两个: 1)开销高昂.在两层c/s结构中,为了维 ...
- Android6.0之后的权限机制对App开发的影响
随着Android系统的更新换代,每次重大更新的方面也逐步扩展,从4.*主要是增强功能,到5.*主要是美化界面,到6.*主要提高系统安全性,再到7.*和8.*主要支撑各种大屏设备,因此开发者需要对每个 ...
- 使用DaoCloud持续构建docker镜像,自动化部署
我们学会了在主机上安装部署docker,也学会了构建自己的docker镜像和容器,启停也都会用了,下一步就需要持续构建发布docker的技能了. 我们希望能在代码提交后,有个远程服务能自动开始构建项目 ...