您的位置:首页 > Web前端 > JavaScript

JS正则表达式

2010-01-16 00:19 176 查看
正则表达式在多种脚本语言中均存在,如JavaScript,Shell,Perl等。它是一种基于规则的功能强大的字符串处理工具。本文是我学习JS正则表达式时,记录的笔记,简要列出JS正则表达式的语法及简单用法,以备参考。

定义:
1./regexp/[flags]
2.new RegExp(regexp[,flags])

其中flags为可选项,可以组合使用,可用的flag有
g: 全局
i: 忽略大小写
m: 多行查找

重复次数表示符
{n} 重复n次
{n,} 重复至少n次
{m,n} m<=n,重复至少m次但不超过n次
* 重复至少0次,等价{0,}
+ 重复至少1次,等价{1,}
? 重复0次或1次,等价{0,1}

字符类
/s:单个空格符,包括tab键和换行符;
/S:单个空格符之外的所有字符;
/d:从0到9的数字;
/D: 从0到9的数字之外的所有字符;
/w:字母,数字或下划线字符;
/W:所有与/w不匹配的字符;
. :除换行符之外的所有字符。
[...]:方括号中的任意字符
[^...]:不在方括号中的字符

特殊字符
/0 空字符 (/u0000)
/t 水平制表符 (/u0009)
/n 换行符 (/u000A)
/v 垂直制表符 (/u000B)
/f 分页符 (/u000C)
/r 回车符 (/u000D)
[/b] 回退符
/xnn 十六进制数nn对应的字符; 如/x41表示字符'A'
/uxxxx 十六进制数xxxx对应的Unicode字符;
/cX 匹配由X指明的控制字符。例如,/cM 匹配一个 Control-M 或回车符。X的值必须为 A-Z 或 a-z 之一;否则,将C视为一个原义的 'C' 字符

选择符
| 表示或。一般与分组符一起使用,表示多个取一个。如(a|b|c)匹配a,b和c

分组符
(exp) 分组符中的元素作为一个单元进行匹配,并将匹配的结果进行存储,以备后面引用
(?:exp) 分组符中的元素作为一个单元进行匹配,但不存储匹配结果

引用符
/n 匹配第n个分组匹配的字符(与第n个分组匹配的字符相同),分组计数从左往右数"("出现的次数,但"(?:"中的"("不参数计数。如/a(b)c(d)e/1/,/1表示匹配b

分界符
^ 匹配字符串开头,在多行模式下,匹配行头
$ 匹配字符串结尾,在多行模式下,匹配行尾
/b 匹配单词边界,也就是指单词和空格间的位置或开头和结尾
/B 匹配非单词边界

(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

(?!pattern) 负向预查,在任何不匹配的字符串开始处匹配查找字符串。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

转义字符
/字符 对具有特殊意义的字符(包括^,$,.,*,+,?,=,!,:,|,/,/,(,),[,],{,}等)进行转义,使其变成普通字符

非贪婪匹配模式
当?紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

方法:
1.exec
使用:regexp.exec(str)
结果:如果没有找到匹配字符串,则返回null;否则返回一个数组,数组有length属性标识数组长度; index属性标识第一个匹配串的位置;input属性标识待匹配串str。数组的第0个元素为正则表达式匹配结果,第1个及其他元素为匹配结果中的分组匹配结果。如:
var str = "howareyou";
var result = //w+(are)/w+/.exec(str);
//result.length = 2
//result.index = 0
//result.input = "howareyou"
//result[0] = "howareyou"
//result[1] = are

当正则表达式有标识"g"时,exec每次都从regexp.lastIndex位置开始查找匹配,每次查找到匹配字符串后,修改lastIndex指向匹配字符串后一个字符所在的位置;因此可以通过循环查找字符串中的所有匹配。如:
var pattern = //bJava/w*/b/g;
var text = "JavaScript is more fun than Java or JavaBeans!";
var result;
while((result = pattern.exec(text)) != null) {
document.write("Matched '" + result[0] + "' at position " + result.index +
" next search begins at position " + pattern.lastIndex + "<br>");
}

2.test
使用:regexp.test(str)
结果:找到匹配项,返回true,否则返回false。常用来做校验。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: