Javascript中,使用RegExp类表示正则表达式
正则表达式也可以是直接包含在一对/之间的字符
如:
$:结尾
var pattern /s$/;
其等价于:
var pattern=new RegExp(s$);
JavaScript中采用的是perl语言使用正则的语法来匹配字符
常用的直接量字符:
\o NUL字符
\t 制表符
\n 换行符
\v 垂直制表符
\f 换页符
\r 回车
字符类:
\s 空格符 \S 非Unicode空白符 [...] 位于括号内的任何字符 [^...]不在括号内的任何字符 . 任意字符,除换行 \w 任何单字字符 相当于[a-zA-Z0-9_] \W 任何非单字字符,相当于[^a-zA-Z0-9_] \d 任何数字 相当于[0-9] \D 任何非数字 相当于[^0-9] [\b] 退格
重复字符:
{n,m} 最少n次,最多m次 {n,} 最少n次,或更多次 {n} 正好n次 ? 0或者1次 {0,1} + 最少1次,或者更多{1,} * 0次或多次 等价于{0,}
选择、分组和引用
"|" 来分隔供选择的字符。 例如:/ab|cd|ef/ 可以匹配ab,或者cd或者ef /\d{3}|[a-z]{4}/ 匹配3个数字和4个字母 "()" 来组合子表达式 例如:/java(script)?/ 可以匹配java但是后面也可以跟script 可以用来在表达式后部分引用前面的子表达式。 例如:/([Jj]ava([Ss]cript)?)\sis\S(fun\w*)/ 其中[Ss]cript 被指定为/2 (以左边括号为准) 例如: 要求开始和结束的引号想匹配 /['"][^'"]*['"]/ 可以写成 /(['"])[^'"]*\1/ /1匹配的是第一个带括号的子表达式
分组,引用字符
| 选择,匹配该符号左边的子表达式或者右边子表达式 (...) 组合,将几个项目组成一个单元,单元可以由*,+,?和|等符号使用 (?:...) 只组合.把项目组合到一个单元,但是不记忆与该组匹配的字符 \n 和第n个分组第一次匹配的字符相匹配。组是括号中表达式 组号是从左到右计数的左括号数。以(?:分组的不编码,无法访问
锚字符:
^ 字符串开头,多行检索,匹配一行的开头 $ 字符串结尾,多行检索中,匹配一行的结尾 \b 匹配词语边界, \B 匹配非词语边界的位置
标志:
和其他正则表达式语法不同,标志是在"/"符号之外说明的,既它们不出现在两个斜杠之间,位于第二个斜杠后面. 如 i :匹配不区分大小写 g :匹配应该是全局的,找出所有的匹配 /\bjava\b/gi ----->查找一个字符串中找到所有出现的"java" m :以多行模式匹配 /Java$/mi --->匹配 "java" 和 "Java\nisfun"
String对象使用正则表达式:
String类支持4种方法用正则表达式:
1.search():
以正则为参数,返回第一个匹配的开始字符位置,否则返回-1
例如:
"Javascript".search(/script/i); ----->返回4
2.replace():
传入正则参数与要修改成的字符串
例如: 将所有"javascript"统一为"JavaScript"
text.replace(/javascript/gi,"JavaScript");
3.match():
传入正则表达式,返回匹配的数组
例如: "1 plus 2 equals 3".match(/\d+/g); --->返回["1","2","3"]
解析URL:
<script language="JavaScript">
//[a-zA-Z0-9]一个或者多个 "://" [a-zA-Z0-9]一个或多个 "/" 非空白符0或多个
var url=/(\w+):\/\/([\w.]+)\/(\S*)/;
var text="Visit my blog at http://www.example.com/~david";
var result=text.match(url);
if(result!=null){
var fullurl=result[0]; //-->http://www.example.com/~david
var protocol=result[1]; //-->http
var host=result[2]; //-->www. example.com
var path=result[3]; //--->~david
alert("fullurl="+fullurl+",protocol="+protocol+",host="+host+",path="+path);
}
</script>
RegExp对象:表达正则表达式的对象;
提供几种方法创建正则表达式:
1.=new RegExp() ,传入正则
2.=new RegExp(,) 传正则和模式组合,如 mi,gi等 =new RegExp("\\d{5}","mi");
RegExp模式匹配方法:
1.exec():
未匹配,返回null,找到,则返回一个数组
例如:
var pattern=/Java/g; var text="JavaScript is more fun than Java"; var result; alert(pattern.exec(text)); while((result=pattern.exec(text))!=null){ alert("匹配上"+result[0]+" ' 在位置"+result.index+" 上,下次匹配从 "+pattern.lastIndex+"开始"); }
2.test():传入正则;
var pattern=/java/i; pattern.test("JavaScript"); //returns true;
RegExp都有五个属性:
1.source :只读字符串,存放正则表达式文本
2.global :只读布尔型,是否有标志g
3.ignoreCase :只读布尔型,是否有标志i
4.multiline :只读布尔型,是否有标志m
5.lastIndex :可读写整数,对于有g标志模式来说,存储字符串下一次开始检索的位置。