Monthly Archives: January 2006

[译]Javscript 正则表达式指南

原文地址:http://www.javascriptkit.com/javatutors/redev.shtml   程序员的正则表达式指南   什么是正则表达式?正则表达式是一种能够对文本内容进行匹配处理的模式,你在DOS中查找文件使用的统配符?和*就属于正则表达式,但只是它的一小部分.为什么这样说呢?比如说你想查找符合下面条件的所有文件:以"fn"打头,后面是1到4个任意字符,以"ht.txt"结尾,这时候DOS的通配符就无能为力了.而正则表达式不仅能处理这些情况,而且能处理更加复杂的模式.   正则表达式的语法在Javascript中定义正则表达式有两种方式,一种是使用正则表达式的对象构造函数,另外一种方法是使用Literal.使用对象构造函数的优点是可以在程序运行过程中改变正则表达式,而使用Literal时性能更好,因为它在载入脚本的时候就进行了编译.对已确定的正则表达式最好使用Literal进行定义,而动态构建正则表达式(如用户输入)时应该使用构造函数.大多数情况下,你可以使用上面的任意一种方法定义正则表达式,然后以完全相同的方式使用.   定义下面是在Javascript中定义正则表达式的方法.在Javascript使用Literal定义正则表达式时,定界符号是向前的斜线(/),在别的语言(如PHP或VBScript)中可能使用其它字符. 使用Literal:/pattern/flags; 例如: var re=/mac/i;使用对象构造函数:new RegExp("pattern","flags"); 例如: var re = new RegExp(window.prompt("Please input a regex.", "yes|yeah","g);   标志在正则表达式中有三个标志,多行输入标志(m)仅在Javascript 1.5及以上版本中支持,其它两个(g,i)可以在绝大多数支持RegExp对象(JavaScript 1.2以上版本)的浏览器中使用.这些标志可以按照任意的顺序和组合使用,它们是正则表达式不可分割的一部分.   完整查找,标志:g使用完整查找标志时,对字符串从头到尾进行正则表达式匹配,并创建一个数组保存所有匹配的结果. 忽略大小写,标志:i使用忽略大小写标志时,对字符串的匹配处理不考虑字母的大小写.国际化开发者应该注意,这个选项对于像ü这样的扩展字符无效. 多行输入,标志:m使用多行输入标志时,输入开始标志(^)和输入结束标志($)也匹配每行的开始和结束,这个标志仅在Javascript 1.5及以上版本中支持.   正则表达式的模式根据你要完成的任务,在正则表达式中使用的模式可以很简单,也可以很复杂.像匹配"hello world"这样简单的字符串,你只需要直接将它写在正则表达式中;但如果要匹配一个Email地址或HTML标记,你需要使用很复杂的模式,它将会使用到下表中大多数的模式语法.   转义字符: 使用转义字符将正则表达式中的特殊字符恢复其本义,也可以使普通字符具有特殊的含义.例如: /(s)/将匹配’(s)’字符串,而/(s)/匹配所有的非空字符并捕获匹配结果.   量词: {n} {n,} {n,m} * + ?量词确定它前面子模式的重复次数,子模式可以是一个字符,一个转义词,一个用小括号括起来的模式或一个字符集合.{n} 匹配n次{n,} 匹配n次或n次以上{n,m} 匹配n到m次* 是{0,}的简单写法,匹配0次或多次+ 是{1,}的简单写法,匹配一次或多次? 是{0,1}的简单写法,匹配0次或一次例如: 模式/o{1,3}将在字符串"tooth"中匹配’00′,在"nose"中匹配’o’ [...]