这篇文章主要介绍了 javascript 正则表达式定义, 对于 JavaScript 正则表达式的语法进行了总结分析, 需要的朋友可以参考下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
本文讲述了 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 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0215/267675.html