正则表达式对象
本对象包含正则表达式模式以及表明如何应用模式的标志。
语法 1
re = /pattern/[flags]
语法 2
re = new RegExp("pattern",["flags"])
参数
re 必选项。将要赋值为正则表达式模式的变量名。
Pattern 必选项。要使用的正则表达式模式。如果使用语法 1,用 "/" 字符分隔模式。如果用语法 2,用引号将模式引起来。
flags 可选项。如果使用语法 2 要用引号将 flag 引起来。标志可以组合使用,可用的有:
g (全文查找出现的所有 pattern)
i (忽略大小写)
m (多行查找) 说明
不要将正则表达式对象跟全局 RegExp 对象混淆。尽管听起来像是一回事,但它们是截然不同的。正则表达式对象的属性只包含一个正则表达式的信息,而全局 RegExp 对象的属性包含了不断更新的每一个匹配出现的信息。
正则表达式对象保存用于查找字符串中的字符组合时的模式。创建正则表达式对象后,或者它被传递给字符串方法,或者字符串被传递给一个正则表达式方法。有关最近进行查找的信息被保存在全局 RegExp 对象中。
当预先知道查找字符串时用语法 1。当查找字符串经常变动或不知道时用语法 2,比如由用户输入得到的字符串。
在使用前 pattern 参数被编译为内部格式。对语法 1 来说,pattern 在该脚本被装载时被编译。对语法 2 来说,pattern 在使用前,或调用 compile 方法时被编译。
示例
下面的示例创建一个包含正则表达式模式及相关标志的对象(re),向您演示正则表达式对象的用法。在本例中,作为结果的正则表达式对象又用于 match 方法中:
function MatchDemo(){ var r, re; // 声明变量。 var s = "The rain in Spain falls mainly in the plain"; re = new RegExp("Spain","i"); // 创建正则表达式对象。 r = s.match(re); // 在字符串 s 中查找匹配。 return(r); // 返回匹配结果。}
属性
lastIndex 属性
返回字符位置,它是被查找字符串中下一次成功匹配的开始位置。
RegExp.lastIndex
与该属性有关的对象总是全局 RegExp 对象。
说明
lastIndex 属性是基于零的,也就是说,第一个字符的索引是零。其初始值为 -1,不论何时产生一个成功匹配,它的值都被修改。
lastIndex 属性被 RegExp 对象的 exec 和 test 方法,以及 String 对象的 match、replace、和 split 方法修改。
下面的规则应用于 lastIndex 的值:
如果还没有匹配,则 lastIndex 被设置为 -1. 如果 lastIndex 比字符串的长度大,则 test 和 exec 失败,并且 lastIndex 被设置为 -1。 如果 lastIndex 等于字符串的长度,且模式与空字符串匹配,则正则表达式匹配。否则,匹配失败并且 lastIndex 被重置为 -1。 否则, lastIndex 被设置为紧接最近的匹配的下一个位置。 示例
下例阐明了 lastIndex 属性的用法。该函数重复了查找字符串,并打印出字符串中每一个字的 index 和 lastIndex 值。
function RegExpTest(){
var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
if (ver >= 5.5){
var src = "The rain in Spain falls mainly in the plain.";
var re = /\w+/g; var arr;
while ((arr = re.exec(src)) != null)
print(arr.index + "-" + arr.lastIndex + "\t" + arr);
}
else{ alert("You need a newer version of JScript for this to work"); }
}
source 属性
返回正则表达式模式的文本的复本。只读。
rgExp.source
rgExp 参数是正则对象。它可以是变量名或文字。
下面的例子举例说明了 source 属性的用法:
function SourceDemo(re, s){
var s1; // 测试字符串中是否存在正则表达式。
if (re.test(s))
s1 = " contains ";
else
s1 = " does not contain ";
// 获得正则表达式自己的文本。
return(s + s1 + re.source);}
方法
compile 方法
把正则表达式编译为内部格式,从而执行得更快。
rgExp.compile(pattern, [flags])
参数
rgexp
必选项。正则表达式对象的一个例子。可以是变量名或文字。
pattern
必选项。字符串表达式,它包含要被编译的正则表达式模式。
flags
可选项。可以组合使用,可用的标志有:
g (全局搜索所有存在的 pattern) i (忽略事件) m (多行搜索) 说明
compile 方法把 pattern 转换为内部的格式,从而执行得更快。例如,这使得可以在循环中更有效地使用正则表达式。当重复使用相同的表达式,那么编译过的正则表达式使执行加速。然而,如果正则表达式改变了,这种编译毫无益处。
示例
下面的例子举例说明了 compile 方法的用法:
function CompileDemo(){
var rs;
var s = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPp" // 只为大写字母创建正则表达式。
var r = new RegExp("[A-Z]", "g");
var a1 = s.match(r) // 查找匹配。
// 只为小写字母编译正则表达式。
r.compile("[a-z]", "g");
var a2 = s.match(r) // 查找匹配。
return(a1 + "\n" + a2;
}
exec 方法
用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。
rgExp.exec(str)
参数
rgExp
必选项。包含正则表达式模式和可用标志的正则表达式对象。
str
必选项。要在其中执行查找的 String 对象或字符串文字。
说明
如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。
如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。
exec 方法返回的数组有三个属性,分别是 input、index 和 lastIndex。Input 属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。
示例
下面的例子举例说明了 exec 方法的用法:
function RegExpTest(){
var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
if (ver >= 5.5){
// 测试 JScript 的版本。
var src = "The rain in Spain falls mainly in the plain.";
var re = /\w+/g; // 创建正则表达式模式。
var arr;
while ((arr = re.exec(src)) != null)
document.write(arr.index + "-" + arr.lastIndex + "\t" + arr);
}
else{ alert("请使用 JScript 的更新版本"); }
}
test 方法
返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。
rgexp.test(str)
参数
rgexp
必选项。包含正则表达式模式或可用标志的正则表达式对象。
str
必选项。要在其上测试查找的字符串。
说明
test 方法检查在字符串中是否存在一个模式,如果存在则返回 true,否则就返回 false。
全局 RegExp 对象的属性不由 test 方法来修改。
示例
下面的例子举例说明了 test 方法的用法:
function TestDemo(re, s){
var s1; // 声明变量。
// 检查字符串是否存在正则表达式。
if (re.test(s)) // 测试是否存在。
s1 = " contains "; // s 包含模式。
else
s1 = " does not contain "; // s 不包含模式。
return("'" + s + "'" + s1 + "'"+ re.source + "'"); // 返回字符串。
}
正则表达式常见范例
1.非负整数 /^\d+$/
2.正整数 /^[0-9]*[1-9][0-9]*$/
3.非正整数 /^((-\d+)|(0+))$/
4.负整数 /^-[0-9]*[1-9][0-9]*$/
5.整数 /^-?\d+$/
6.非负浮点数 /^\d+(\.\d+)?$/
7.正浮点数 /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/
8.非正浮点数 /^((-\d+(\.\d+)?)|(0+(\.0+)?))$/
9.负浮点数 /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/
10.浮点数 /^(-?\d+)(\.\d+)?$/
11.数字 /^\d+(\.{1}\d+)?$/
12.由26个英文字母组成的字符串 /^[A-Za-z]+$/
13.由26个英文字母的大写组成的字符串 /^[A-Z]+$/
14.由26个英文字母的小写组成的字符串 /^[a-z]+$/
15.由数字和26个英文字母组成的字符串 /^[A-Za-z0-9]+$/
16.由数字、26个英文字母或者下划线组成的字符串 /^\w+$/
17.匹配所有单字节长度的字符组成的字符串 /^[\x00-\xff]+$/
18.匹配所有双字节长度的字符组成的字符串 /^[^\x00-\xff]+$/
19.字符串是否含有双字节字 /[^\x00-\xff]+/
20.email地址 /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/
或者 /w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/
21.url地址 /^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/
或者 /http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?/
22.匹配中文字符的正则 /[u4e00-u9fa5]/
23.匹配双字节字符(包括汉字在内) /[^x00-xff]/
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){ return this.replace([^x00-xff]/g,”aa”).length; } 24.匹配空行的正则 /n[s| ]*r/
25.匹配HTML标记的正则 /<(.*)>.*</1>|<(.*) />/
26.匹配首尾空格的正则 /(^s*)|(s*$)/
应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:
String.prototype.trim = function(){ return this.replace(/(^s*)|(s*$)/g, “”); } 27.匹配IP地址的正则 /(d+).(d+).(d+).(d+)/
应用:利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:
function IP2V(ip){ re=/(d+).(d+).(d+).(d+)/g;
if(re.test(ip)){
return RegExp.$1*Math.pow(255,3))+
RegExp.$2*Math.pow(255,2))+
RegExp.$3*255+RegExp.$4*1; } else{ throw new Error(“Not a valid IP address!”); } }
其实直接用split函数来分解可能更简单,程序如下:
var ip=”10.100.20.168″;
ip=ip.split(“.”);
alert(“IP值是:”+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1));
28.去除字串中重复的字符的javascript程序
var s=”abacabefgeeii”;
var s1=s.replace(/(.).*1/g,”$1″);
var re=new RegExp(“["+s1+"]“,”g”);
var s2=s.replace(re,”");
alert(s1+s2); //结果为:abcefgi /*使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,
两者串连。这个方法对于字符顺序有要求的字符串可能不适用。*/ 29.用正则表达式从URL地址中提取文件名的javascript程序
s=”http://www.google.com/page1.htm“;
s=s.replace(/(.*/){0,}([^.]+).*/ig,”$2″);
alert(s); //结果为page1
30.限制表单文本框输入内容
只能输入中文:
onkeyup=”value=value.replace(/[^u4E00-u9FA5]/g,”)”
onbeforepaste=”clipboardData.setData(‘text’,
clipboardData.getData(‘text’).replace(/[^u4E00-u9FA5]/g,”))”
只能输入全角字符:
onkeyup=”value=value.replace(/[^uFF00-uFFFF]/g,”)”
onbeforepaste=”clipboardData.setData(‘text’,
clipboardData.getData(‘text’).replace(/[^uFF00-uFFFF]/g,”))”
只能输入数字:
onkeyup=”value=value.replace(/[^d]/g,”)”
onbeforepaste=”clipboardData.setData(‘text’,
clipboardData.getData(‘text’).replace(/[^d]/g,”))”
只能输入数字和英文:
onkeyup=”value=value.replace(/[W]/g,”)”
onbeforepaste=”clipboardData.setData(‘text’,
clipboardData.getData(‘text’).replace(/[^d]/g,”))”
31.验证文件名由字母,数字,下滑线组成 /^((\w+)(\.{1})(\w+))$/
32.匹配日期(1900-1999)
/^19\d{2}-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3([0|1])))$/
33.匹配日期(2000-2999)
/^20\d{2}-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3([0|1])))$/
34.匹配日期时间
/^(1|2\d{3}-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3([0|1]))))( (\d{2}):(\d{2}):(\d{2}))?$/
网页验证的例子:
<SCRIPT language=”javascript”><!–
function validate(){ var frm = document.form1;
if ( frm.orgname.value==”" ){
alert(“机构名称必须填写,请输入!”);
frm.orgname.focus();
return false; } if ( frm.orgfunction.value==”" ){ alert(“机构职能必须填写,请输入!”);
frm.orgfunction.focus();
return false; } if ( frm.orgpostcode.value==”" ){…} else{ var pattern=/^d…{6}$/;
if(pattern.test(frm.orgpostcode.value)){…} else{ alert(“输入的邮政编码不是合法的格式!”);
frm.orgpostcode.focus();
return false; } }
if ( frm.orgphone.value==”" ){…} else{ var str=frm.orgphone.value;
var reg=/(^[0-9]…{3,4}-[0-9]…{3,8}$)|(^[0-9]…{3,8}$)|(^([0-9]…{3,4})[0-9]…{3,8}$)|(^0…{0,1}13[0-9]…{9}$)/;
if (isNaN(str)){ if(reg.test(str)==false){
alert(“电话号码输入有误,请重新输入!”);
frm.orgphone.value=”";
frm.orgphone.focus();
return false; } }
else if(str.length<6){ alert(“电话输入有误,请重新输入!”);
frm.orgphone.focus();
return false; } }
if ( frm.orgfax.value==”" ){…} else{ var str=frm.orgfax.value;
var reg=/(^[0-9]…{3,4}-[0-9]…{3,8}$)|(^[0-9]…{3,8}$)|(^([0-9]…{3,4})[0-9]…{3,8}$)|(^0…{0,1}13[0-9]…{9}$)/;
if (isNaN(str)){ if(reg.test(str)==false){
alert(“传真输入有误,请重新输入!”);
frm.orgfax.value=”";
frm.orgfax.focus();
return false; } }
else if(str.length<6){ alert(“传真输入有误,请重新输入!”);
frm.orgfax.focus();
return false; } }
if ( frm.orgemail.value==”" ){…} else{ var pattern=/^w+((-w+)|(.w+))*@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$/;
if(pattern.test(frm.orgemail.value)){…} else{ alert(“输入的电子邮箱不是合法的格式!”);
frm.orgemail.focus();
return false; } }
if ( frm.orgurl.value==”" ){…} else{ var pattern=new RegExp(“((^http)|(^https)|(^ftp))://(\w)+.(\w)+”); if(pattern.test(frm.orgurl.value)){…} else{ alert(“输入的URL不是合法的格式!”);
frm.orgurl.focus();
return false; } }
}
//–></SCRIPT>
// More
小写英文:<xmp style="display:inline"> </xmp><input id=test οnkeypress="regInput(/^[a-z]*$/)" style="ime-mode:Disabled"><br>
大写英文:<xmp style="display:inline"> </xmp><input id=test οnkeypress="regInput(/^[A-Z]*$/)" style="ime-mode:Disabled"><br>
任意数字:<xmp style="display:inline"> </xmp><input id=test οnkeypress="regInput(/^[0-9]*$/)" style="ime-mode:Disabled"><br>
限2位小数:<xmp style="display:inline"> </xmp><input id=test οnkeypress="regInput(/^/d*/.?/d{0,2}$/)" style="ime-mode:Disabled"> 如: 123.12<br>
日 期:<xmp style="display:inline"> </xmp><input id=test οnkeypress="regInput(/^/d{1,4}([-//](/d{1,2}([-//](/d{1,2})?)?)?)?$/)" style="ime-mode:Disabled"> 如: 2002-9-29<br>
任意中文:<xmp style="display:inline"> </xmp><input οnkeypress="regInput(/^$/)"><br>
部分英文:<xmp style="display:inline"> </xmp><input οnkeypress="regInput(/^[a-e]*$/i)" style="ime-mode:Disabled"> 范围: a,b,c,d,e<br>
部分中文:<xmp style="display:inline"> </xmp>
<script language=javascript>
function checkChinese(oldLength, obj)
{
var oTR = window.document.selection.createRange()
oTR.moveStart("character", -1*(obj.value.length-oldLength))
oTR.text = oTR.text.replace(/[^一二三四五六七八九十]/g, "")
}
</script>
<input οnkeypress="return false" οnkeydοwn="setTimeout('checkChinese('+this.value.length+','+this.uniqueID+')', 1)"> 范围: 一二三四五六七八九十<br>
RegExp 对象
保存有关正则表达式模式匹配信息的固有全局对象。
RegExp.property
必选项 property 参数是 RegExp 对象的任意一个属性。
说明
RegExp 对象不能直接创建,但始终可以使用。在成功的正则表达式查找完成之前,RegExp 对象各属性的初始值如下所示:
index -1lastIndex -1lastMatch $&空字符串。lastParen $+空字符串。leftContext 空字符串。rightContext 空字符串。$1 - $9 $1 - $9空字符串。
在成功的正则表达式查找完成之前,其属性值为 undefined。
不要将全局 RegExp 对象与 正则表达式 对象混淆。尽管听起来像是一回事,但它们是截然不同的。全局 RegExp 对象的属性包含不断更新的关于每个匹配出现的信息,而正则表达式对象只包含出现正则表达式匹配的信息。
示例
下面的例子演示了全局 RegExp 对象的用法。
function matchDemo(){ var s; var re = new RegExp("d(b+)(d)","ig"); var str = "cdbBdbsbdbdz"; var arr = re.exec(str); s = "$1 contains: " +RegExp.$1 + "\n"; s += "$2 contains: " + RegExp.$2 + "\n"; s += "$3 contains: " + RegExp.$3; return(s);}
属性列表:
$1...$9 属性 | index 属性 | input 属性 | lastIndex 属性 | lastMatch 属性 | lastParen 属性 | leftContext 属性 | rightContext 属性
$1...$9 属性
返回九个在模式匹配期间找到的、最近保存的部分。只读。
RegExp.$n
参数
RegExp
总是全局 RegExp 对象。
n
1 至 9.间的任意整数。
说明
无论何时产生一个成功的带插入语的匹配,$1...$9 属性的值都被修改,但是只有最近的九个可以被保存起来。
下面的例子举例说明了 $1...$9 属性的用法:
function matchDemo(){ var s; var re = new RegExp("d(b+)(d)","ig"); var str = "cdbBdbsbdbdz"; var arr = re.exec(str); s = "$1 contains: " +RegExp.$1 + "\n"; s += "$2 contains: " + RegExp.$2 + "\n"; s += "$3 contains: " + RegExp.$3; return(s);}
index 属性
返回字符位置,它是查找字符串中第一个成功匹配的开始位置。只读。
RegExp.index
该属性的相关对象总是全局 RegExp 对象。
说明
index 属性是基于零的。其初始值为 -1,不论何时产生一个成功匹配,它的值都将改变。
示例
下例阐明了 index 属性的用法。该函数重复了字符串查找,并将字符串中每一个字的 index 和 lastIndex 值都打印出来。
function RegExpTest(){ var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion()) if (ver >= 5.5){ var src = "The rain in Spain falls mainly in the plain."; var re = /\w+/g; var arr; while ((arr = re.exec(src)) != null) print(arr.index + "-" + arr.lastIndex + "\t" + arr); } else{ alert("You need a newer version of JScript for this to work"); }}
input 属性($_)
返回执行规范表述查找的字符串。只读。
RegExp.input
与该属性有关的对象总是全局 RegExp 对象。
说明
任何时候改变了被查找的字符串,input 属性的值都会被修改。
下面的例子举例说明了 input 属性的用法:
function inputDemo(){ var s; var re = new RegExp("d(b+)(d)","ig"); var str = "cdbBdbsbdbdz"; var arr = re.exec(str); s = "The string used for the match was " + RegExp.input; return(s);}
lastIndex 属性
返回字符位置,它是被查找字符串中下一次成功匹配的开始位置。
RegExp.lastIndex
与该属性有关的对象总是全局 RegExp 对象。
说明
lastIndex 属性是基于零的,也就是说,第一个字符的索引是零。其初始值为 -1,不论何时产生一个成功匹配,它的值都被修改。
lastIndex 属性被 RegExp 对象的 exec 和 test 方法,以及 String 对象的 match、replace、和 split 方法修改。
下面的规则应用于 lastIndex 的值:
如果还没有匹配,则 lastIndex 被设置为 -1. 如果 lastIndex 比字符串的长度大,则 test 和 exec 失败,并且 lastIndex 被设置为 -1。 如果 lastIndex 等于字符串的长度,且模式与空字符串匹配,则正则表达式匹配。否则,匹配失败并且 lastIndex 被重置为 -1。 否则, lastIndex 被设置为紧接最近的匹配的下一个位置。 示例
下例阐明了 lastIndex 属性的用法。该函数重复了查找字符串,并打印出字符串中每一个字的 index 和 lastIndex 值。
function RegExpTest(){ var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion()) if (ver >= 5.5){ var src = "The rain in Spain falls mainly in the plain."; var re = /\w+/g; var arr; while ((arr = re.exec(src)) != null) print(arr.index + "-" + arr.lastIndex + "\t" + arr); } else{ alert("You need a newer version of JScript for this to work"); }}
lastMatch 属性 ($&)
返回任何正则表达式搜索过程中的最后匹配的字符。只读。
RegExp.lastMatch
与此属性相关联的对象总是全局 RegExp 对象。
说明
lastMatch 属性的初始值是一个空字符串。只要找到了匹配的字符,lastMatch 属性的值就会相应改变。
示例
下面的例子演示了 lastMatch 属性的用法:
function matchDemo(){ var s; //声明变量。 var re = new RegExp("d(b+)(d)","ig"); //正则表达式样式。 var str = "cdbBdbsbdbdz"; //要被查找的字符串。 var arr = re.exec(str); //进行查找。 s = "$1 returns: " + RegExp.$1 + "\n"; s += "$2 returns: " + RegExp.$2 + "\n"; s += "$3 returns: " + RegExp.$3 + "\n"; s += "input returns : " + RegExp.input + "\n"; s += "lastMatch returns: " + RegExp.lastMatch + "\n"; s += "leftContext returns: " + RegExp.leftContext + "\n"; s += "rightContext returns: " + RegExp.rightContext + "\n"; s += "lastParen returns: " + RegExp.lastParen + "\n"; return(s); //返回结果。}document.write(matchDemo());
lastParen 属性 ($+)
如果有的话,返回任何正则表达式查找过程中最后括的子匹配。只读。
RegExp.lastParen
与此属性相关的对象总是全局 RegExp 对象。
说明
属性的初始值 lastParen 属性是空字符串。只要成功找到匹配字符,lastParen 属性的值就会相应改变。
示例
下面的例子演示了 lastParen 属性的用法:
function matchDemo(){ var s; //声明变量。 var re = new RegExp("d(b+)(d)","ig"); //正则表达式样式。 var str = "cdbBdbsbdbdz"; //将被查找的字符串。 var arr = re.exec(str); //进行查找。 s = "$1 returns: " + RegExp.$1 + "\n"; s += "$2 returns: " + RegExp.$2 + "\n"; s += "$3 returns: " + RegExp.$3 + "\n"; s += "input returns : " + RegExp.input + "\n"; s += "lastMatch returns: " + RegExp.lastMatch + "\n"; s += "leftContext returns: " + RegExp.leftContext + "\n"; s += "rightContext returns: " + RegExp.rightContext + "\n"; s += "lastParen returns: " + RegExp.lastParen + "\n"; return(s); //返回结果。}document.write(matchDemo());
leftContext 属性 ($`)
返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符。只读。
RegExp.leftContext
与此属性相关联的对象总是全局 RegExp 对象。
说明
leftContext 属性的初始值是空字符串。只要找到了匹配的字符,leftContext 属性的值就会相应改变。
示例
以下示例阐述了 leftContext 属性的用法:
function matchDemo(){ var s; //声明变量。 var re = new RegExp("d(b+)(d)","ig"); //正则表达式样式。 var str = "cdbBdbsbdbdz"; //将被查找的字符串。 var arr = re.exec(str); //进行查找。 s = "$1 returns: " + RegExp.$1 + "\n"; s += "$2 returns: " + RegExp.$2 + "\n"; s += "$3 returns: " + RegExp.$3 + "\n"; s += "input returns : " + RegExp.input + "\n"; s += "lastMatch returns: " + RegExp.lastMatch + "\n"; s += "leftContext returns: " + RegExp.leftContext + "\n"; s += "rightContext returns: " + RegExp.rightContext + "\n"; s += "lastParen returns: " + RegExp.lastParen + "\n"; return(s); //返回结果。}document.write(matchDemo());
rightContext 属性 ($')
返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。只读。
RegExp.rightContext
与此属性相关联的对象总是全局的 RegExp 对象。
说明
rightContext 属性的初始值是空字符串。只要成功找到了匹配的字符,rightContext 属性的值就会相应改变。
示例
以下示例阐述了 rightContext 属性的用法:
function matchDemo(){ var s; //声明变量。 var re = new RegExp("d(b+)(d)","ig"); //正则表达式样式。 var str = "cdbBdbsbdbdz"; //将被查找的字符串。 var arr = re.exec(str); //进行查找。 s = "$1 returns: " + RegExp.$1 + "\n"; s += "$2 returns: " + RegExp.$2 + "\n"; s += "$3 returns: " + RegExp.$3 + "\n"; s += "input returns : " + RegExp.input + "\n"; s += "lastMatch returns: " + RegExp.lastMatch + "\n"; s += "leftContext returns: " + RegExp.leftContext + "\n"; s += "rightContext returns: " + RegExp.rightContext + "\n"; s += "lastParen returns: " + RegExp.lastParen + "\n"; return(s); //返回结果。}document.write(matchDemo());
验证手机号码正则表达式:/^(?:13\d|15[89])-?\d{5}(\d{3}|\*{3})$/
验证电话号码正则表达式:/^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/