在ASP中,使用正则表达式前需声明对象“set re=new RegExp”。
RegExp有三个重要属性:
1. global:设置或返回一个布尔值,指明搜索匹配字符串时是针对全部文本还是只匹配第一处,默认为false
2. ignoreCase:设置或返回一个布尔值,指明搜索字符串时是否区分大小写,默认为false
3. pattern:此项以正则表达式(即形同"[^]]*"之类的式子)表示,指明匹配模式,此为必设项
RegExp对象的方法:
1. RegExp.replace(string, text):在文本string中,将以pattern模式找到的匹配字符串替换为变量text,并返回替换后文本
2. RegExp.test(string):在文本string中搜索匹配字串,如有匹配则返回true,否则返回false
3. RegExp.execute(string):在文本string中搜索匹配字串,并将各匹配字串分别放在各Match对象中,后返回所有Match对象之集合Matches
Match对象的属性:
1. firstIndex:返回该对象对应匹配字串的首字母在原始文本中的索引,以“0”为起始位置
2. length:返回匹配字串长度
3. value:返回匹配字串
下面回顾一下上次的函数:
set re=new regExp ’建立正则表达式对象regular expression
re.IgnoreCase=true ’忽略大小写
re.Global=true
’---------搜索匹配字串针对全部文本而不是仅一处
re.Pattern="((http|https|ftp):\/\/([\w-]+\.)+[\w]+(\/[\w-]+)*[\/]?([\w-]+\.[\w]+)?(\?[\w]+=[\w]+(&[\w]+=[\w]+)*)?)"
’上面一句,最外层一个圆括号,其中的所有字串可用"$1"表示,"$2"表示第一个嵌套括号中的字串"http|https|ftp"(这里只用到"$1")。
’以这个网址为例说明匹配情况 "http://www.bingzhuo.com/v1/index.htm?p=1&q=2":
’"http|https|ftp"表示三者中的一个,匹配网址的前缀"http";
’":\/\/"用到了转义字符"\",等价于"://";
’"[\w]"匹配单个字母、数字和下划线,"[\w-]"匹配单个"\w"或"-","[\w-]+"匹配至少一个"\w"或"-","[\w-]+\."匹配一个以"."结束的字串如"bing-zhuo.",而"([\w-]+\.)+"则匹配多个以"."结束的字串如这里的"www.bingzhuo.";
’"[\w]+"匹配这里的"com";
’"(\/[\w-]+)*"匹配0个或以上类似"/v1"的字串,这是可有可无的;
’"[\/]?"表示网址后的"/"可有可无,但不超过一个;
’"([\w-]+\.[\w]+)?"匹配0或1个这里的"index.htm";
’再看最后的"?p=1&q=2",这种以"?"开始的字串最多只有一个,而其中以"&"开始的则可有多个。"\?[\w]+=[\w]+"匹配"?p=1","&[\w]+=[\w]+"匹配"&q=2",后加"*"表示可重复0~N次,而"(\?[\w]+=……+)*)?"后的"?"表示整个以"?"开始的参数可重复0~1次。
str=re.replace(str,"<a href=’$1’ target=’_blank’>$1</a>")
最后,以Pattern指定的模式替换匹配文本,上面的"$1"表示最外层圆括号内的整个网址。
如下是我写的自动识别链接的代码:
function autoLink(str)
str=" "&str
set re=new regExp ’建立正则表达式对象regular expression
re.IgnoreCase=true ’忽略大小写
re.Global=true
’---------搜索匹配字串针对全部文本而不是仅一处
’查找带协议前缀(如http)的链接
re.Pattern="((http|https|ftp):\/\/([\w-]+\.)+[\w]+(\/[\w-]+)*[\/]?([\w-]+\.[\w]+)?(\?[\w]+=[\w]+(&[\w]+=[\w]+)*)?)"
str=re.replace(str,"<a href=’$1’ target=’_blank’>$1</a>")
’查找不带协议前缀的链接
re.Pattern="([^\/])(www\.([\w-]+\.)+[\w]+(\/[\w-]+)*[\/]?([\w-]+\.[\w]+)?(\?[\w]+=[\w]+(&[\w]+=[\w]+)*)?)"
str=re.replace(str,"$1<a href=’http://$2’ target=’_blank’>$2</a>")
’查找邮件链接
re.Pattern="(mailto:)?([\w]+@([\w-]+\.)+[\w]+)"
str=re.replace(str,"<a href=’mailto:$2’>$1$2</a>")
set re=nothing
str=trim(str)
autolink=str
end function
不过这个函数尚有一个缺欠是我目前无法修补的,便是如果在无协议前缀的链接前加上“\”成为“\www.bingzhuo.com”便不能自动链接了,希望以后能改正这一点。
下面介绍一下正则表达式的特殊字符:
“^”后接字符为字串开头:如"^b"匹配"bing"而不匹配"abc"
“$”前接字符为字串末尾:如"g$"匹配"bing"而不匹配"fgh"
“*”前接字符重复0~N次:如"go*gle"匹配"ggle"和"goooogle"
“+”前接字符重复1~N次:如"go+gle"匹配"gogle"和"gooogle"而不匹配"ggle"
“?”前接字符重复0或1次:如"go?gle"匹配"ggle"和"gogle"而不匹配"gooogle"
“.”表示除换行符外的所有字符:如".b"匹配"ab","cb",".+"匹配不换行的所有字符串
“|”表示“或”:如"ab|cd"同时匹配"ab"和"cd"而不匹配"abcd"
“( )”表示一或多个字符,从前往后,圆括号中的匹配字符串依次以$1,……$9,……返回:如"(bi(ng)z)hu(o)"中,$1代表"bi(ng)z",$2代表"ng",$3代表"o"
“[ ]”中可有多个字符,但只表示其中一个:如"[xyx]"匹配"x","y","z"但不匹配"xyz",等同于"x|y|z";另,"[abcde]"这种连续字符可简写为"[a-e]","[abcde12345]"可简写为"[a-e1-5]"
“[^ ]”表示除括号内字符以外的单个字符:如"[^xyz]"匹配"w","a"而不匹配"x","y";"[^abcde]"亦可简写为"[^a-e]"
“{n}”n为一数字,表示前接字符重复次数:如"a{3}"表示"aaa"
“{n,}”表示前接字符至少重复n次:如"a{3}"匹配"aaa"和"aaaaa"而不匹配"aa"
“{n,m}”表示前接字符至少重复n次,至多重复m次
“\”为转义字符,后接上述特殊字符时表示该字符:如"\?"表示"?","\["表示"["
“\w”匹配数字+字母+下划线集合;“\W”匹配除“\w”外的其他字符
“\d”匹配单个数字,“\D”匹配非数字
RegExp有三个重要属性:
1. global:设置或返回一个布尔值,指明搜索匹配字符串时是针对全部文本还是只匹配第一处,默认为false
2. ignoreCase:设置或返回一个布尔值,指明搜索字符串时是否区分大小写,默认为false
3. pattern:此项以正则表达式(即形同"[^]]*"之类的式子)表示,指明匹配模式,此为必设项
RegExp对象的方法:
1. RegExp.replace(string, text):在文本string中,将以pattern模式找到的匹配字符串替换为变量text,并返回替换后文本
2. RegExp.test(string):在文本string中搜索匹配字串,如有匹配则返回true,否则返回false
3. RegExp.execute(string):在文本string中搜索匹配字串,并将各匹配字串分别放在各Match对象中,后返回所有Match对象之集合Matches
Match对象的属性:
1. firstIndex:返回该对象对应匹配字串的首字母在原始文本中的索引,以“0”为起始位置
2. length:返回匹配字串长度
3. value:返回匹配字串
下面回顾一下上次的函数:
set re=new regExp ’建立正则表达式对象regular expression
re.IgnoreCase=true ’忽略大小写
re.Global=true
’---------搜索匹配字串针对全部文本而不是仅一处
re.Pattern="((http|https|ftp):\/\/([\w-]+\.)+[\w]+(\/[\w-]+)*[\/]?([\w-]+\.[\w]+)?(\?[\w]+=[\w]+(&[\w]+=[\w]+)*)?)"
’上面一句,最外层一个圆括号,其中的所有字串可用"$1"表示,"$2"表示第一个嵌套括号中的字串"http|https|ftp"(这里只用到"$1")。
’以这个网址为例说明匹配情况 "http://www.bingzhuo.com/v1/index.htm?p=1&q=2":
’"http|https|ftp"表示三者中的一个,匹配网址的前缀"http";
’":\/\/"用到了转义字符"\",等价于"://";
’"[\w]"匹配单个字母、数字和下划线,"[\w-]"匹配单个"\w"或"-","[\w-]+"匹配至少一个"\w"或"-","[\w-]+\."匹配一个以"."结束的字串如"bing-zhuo.",而"([\w-]+\.)+"则匹配多个以"."结束的字串如这里的"www.bingzhuo.";
’"[\w]+"匹配这里的"com";
’"(\/[\w-]+)*"匹配0个或以上类似"/v1"的字串,这是可有可无的;
’"[\/]?"表示网址后的"/"可有可无,但不超过一个;
’"([\w-]+\.[\w]+)?"匹配0或1个这里的"index.htm";
’再看最后的"?p=1&q=2",这种以"?"开始的字串最多只有一个,而其中以"&"开始的则可有多个。"\?[\w]+=[\w]+"匹配"?p=1","&[\w]+=[\w]+"匹配"&q=2",后加"*"表示可重复0~N次,而"(\?[\w]+=……+)*)?"后的"?"表示整个以"?"开始的参数可重复0~1次。
str=re.replace(str,"<a href=’$1’ target=’_blank’>$1</a>")
最后,以Pattern指定的模式替换匹配文本,上面的"$1"表示最外层圆括号内的整个网址。
如下是我写的自动识别链接的代码:
function autoLink(str)
str=" "&str
set re=new regExp ’建立正则表达式对象regular expression
re.IgnoreCase=true ’忽略大小写
re.Global=true
’---------搜索匹配字串针对全部文本而不是仅一处
’查找带协议前缀(如http)的链接
re.Pattern="((http|https|ftp):\/\/([\w-]+\.)+[\w]+(\/[\w-]+)*[\/]?([\w-]+\.[\w]+)?(\?[\w]+=[\w]+(&[\w]+=[\w]+)*)?)"
str=re.replace(str,"<a href=’$1’ target=’_blank’>$1</a>")
’查找不带协议前缀的链接
re.Pattern="([^\/])(www\.([\w-]+\.)+[\w]+(\/[\w-]+)*[\/]?([\w-]+\.[\w]+)?(\?[\w]+=[\w]+(&[\w]+=[\w]+)*)?)"
str=re.replace(str,"$1<a href=’http://$2’ target=’_blank’>$2</a>")
’查找邮件链接
re.Pattern="(mailto:)?([\w]+@([\w-]+\.)+[\w]+)"
str=re.replace(str,"<a href=’mailto:$2’>$1$2</a>")
set re=nothing
str=trim(str)
autolink=str
end function
不过这个函数尚有一个缺欠是我目前无法修补的,便是如果在无协议前缀的链接前加上“\”成为“\www.bingzhuo.com”便不能自动链接了,希望以后能改正这一点。
下面介绍一下正则表达式的特殊字符:
“^”后接字符为字串开头:如"^b"匹配"bing"而不匹配"abc"
“$”前接字符为字串末尾:如"g$"匹配"bing"而不匹配"fgh"
“*”前接字符重复0~N次:如"go*gle"匹配"ggle"和"goooogle"
“+”前接字符重复1~N次:如"go+gle"匹配"gogle"和"gooogle"而不匹配"ggle"
“?”前接字符重复0或1次:如"go?gle"匹配"ggle"和"gogle"而不匹配"gooogle"
“.”表示除换行符外的所有字符:如".b"匹配"ab","cb",".+"匹配不换行的所有字符串
“|”表示“或”:如"ab|cd"同时匹配"ab"和"cd"而不匹配"abcd"
“( )”表示一或多个字符,从前往后,圆括号中的匹配字符串依次以$1,……$9,……返回:如"(bi(ng)z)hu(o)"中,$1代表"bi(ng)z",$2代表"ng",$3代表"o"
“[ ]”中可有多个字符,但只表示其中一个:如"[xyx]"匹配"x","y","z"但不匹配"xyz",等同于"x|y|z";另,"[abcde]"这种连续字符可简写为"[a-e]","[abcde12345]"可简写为"[a-e1-5]"
“[^ ]”表示除括号内字符以外的单个字符:如"[^xyz]"匹配"w","a"而不匹配"x","y";"[^abcde]"亦可简写为"[^a-e]"
“{n}”n为一数字,表示前接字符重复次数:如"a{3}"表示"aaa"
“{n,}”表示前接字符至少重复n次:如"a{3}"匹配"aaa"和"aaaaa"而不匹配"aa"
“{n,m}”表示前接字符至少重复n次,至多重复m次
“\”为转义字符,后接上述特殊字符时表示该字符:如"\?"表示"?","\["表示"["
“\w”匹配数字+字母+下划线集合;“\W”匹配除“\w”外的其他字符
“\d”匹配单个数字,“\D”匹配非数字