本文介绍了javascript中正则表达式的用法,在JavaScript中,正则表达式是通过RegExp对象使用的,RegExp对象是JavaScript中的一个内置对象,有需要的朋友参考下。
在javascript中正则表达式的用法,可以通过两种方式创建新的RegExp对象:
复制代码 代码示例:
var myRegExp= /b'|'b/;//斜杠(/)表示正则表达式的开始和结束
var myRegExp=new RegExp("b'|'b");
在用构造函数创建RegExp时,注意,在字符串中,反斜杠表示一个转义字符。例如b代表退格。因此,
在字符串中为了区分,需要加两个斜杠,如上所示
另外,RegExp的三个属性值在采用构造函数时的指定方法如下:
复制代码 代码示例:
var myRegExp=new RegExp("hellob","gi");
简单的正则表达式:
复制代码 代码示例:
var myString="Paul,Paula,Pauline,paul,Paul";
var myRegExp=/Paul/;
myString=myString.replace(myRegExp,"Ringo");//此时myString为:Ringo,Paula,Pauline,paul,Paul
RegExp的三个属性:
g:全局匹配,查找所有与模式匹配的子串,而不是在找到第一个匹配的子串后就结束
i:模式不区分大小写。
m:多行标记,只能用于IE 5.5+和NN 6+,该标记指定,特殊字符^和$可以匹配多行文本和字符串
的开始和结束
实例:
复制代码 代码示例:
var myString="Paul,Paula,Pauline,paul,Paul";
var myRegExp=/Paul/g;
myString=myString.replace(myRegExp,"Ringo");
//此时myString的值为:Ringo,Ringo,Ringoine,paul,Ringo
var myRegExp=/Paul/gi;
myString=myString.replace(myRegExp,"Ringo");
//此时myString的值为:Ringo,Ringo,Ringoine,Ringo,Ringo
特殊字符——文本、数字和标点符号:
d 0~9 的任何数字 dd匹配72,但不匹配7a或aa
D 任何非数字字符 DD匹配ab,但是不匹配13或8f
w 任何单词字符【A~Z、a~z、0~9、下划线(_)】 www匹配A_2,不匹配A@a或者&%$
W 任何非单词字符 W匹配@,但是不匹配a
s 任何空白字符 s与制表符、回车符、换页符、竖杠匹配
S 任何非空白字符 S匹配A,但是不匹配制表符
. 除换行符(n)之外任意单个字符 .匹配a或者4,或者@
[…] 匹配位于方括号之内的任一个字符 [a-z]匹配a~z所有字符
[^…] 匹配除方括号内的字符之外的任何字符 [^a-z]匹配除了a~z之外任何字符
特殊字符——重复字符
{n} 前一项出现n次 x{2}与xx匹配
{n,} 前一项出现n次,或者n次以上 x{2,}匹配xx、xxx、xxxx、xxxxx等等
{n,m} 前一项至少出现n次,至多出现m次 x{2,4}匹配xx、xxx、xxxx
? 前一项出现0次或1次 x?匹配空串或者x
+ 前一项出现1次或多次 x+匹配x、xx、xxx、xxxx、xxxxx等
* 前一项出现0次或多次 x*匹配空串、x、xx、xxx、xxxx等等
特殊字符——位置字符
^ 模式必须位于字符串的开头,如果是多行字符串,模式就位于一行的开头。对于多行文本
(即包含回车符的字符串),在定义正则表达式时,要使用m
$ 模式必须位于字符串的借书位置,如果是多行字符串,模式就位于一行的结束位置。对于
多行文本(即包含回车符的字符串),在定义正则表达式时,要使用m
b 匹配单词分界位置,即单词字符与非单词字符之间的位置
B 匹配非单词分界位置
实例:
如果要确保模式位于一行的开头,可用:^myPattern,这将与一行开头的myPattern匹配
如果要在一行的结尾匹配该模式,可用:myPattern$
对于b与B,它们容易混淆,因为它们不匹配字符,而是匹配字符之间的位置
复制代码 代码示例:
var myString="Hello world!,let's go";
var myRegExp=/b/g;
myString=myString.replace(myRegExp,"|");
//此后,myString值为:|Hello| |world|!,|let|'|s| |go|
var myRegExp=/B/g;
myString=myString.replace(myRegExp,"|");
//此后,myString值为:H|e|l|l|o w|o|r|l|d!,l|e|t's g|o
正则表达式的分组
如果要把多个表达式处理为一个组,只需将它们放在圆括号中,如/(dd)/
正则表达式中的圆括号是把字符模式组合在一起的特殊字符,圆括号本身不是要匹配的字符
实例:
复制代码 代码示例:
/Javascript+/; //这个表示t出现1次或者多次
/(Javascript)+/; //这个表示Javascript字符串出现1次或者多次
在分组中还可以配合使用分组和特殊字符竖杠(|)。|是二选一字符,与C语言中的||作用一样
实例:
复制代码 代码示例:
/(VB)?(Java)Scriptb/gi;//这个不仅匹配VBScript和JavaScript,还匹配VBJavaScript
/(VB|Java)Scriptb/gi;//这个只是匹配VBScript和JavaScript
重用字符组
可以在正则表达式中重用通过一组字符指定的模式。要引用前面的字符组,只需输入和表示
分组顺序的数字即可。例如,第一个字符分组可引用为1,第3个可以为3
实例:
复制代码 代码示例:
/(d)(w),12/;//这个匹配形如:1a,4d类型的字符串
使用正则表达式验证电话号码、邮政编码、电子邮件的方法:
复制代码 代码示例:
function isValidTeliphone(telephoneNumber)
{
var telRegExp=/^(+d{1,3} ?)?((d{1,5})|d{1,5}) ?d{3}?d{0,7}( (x|xtn|ext|extn|pax|pbx|extension)?.? ?d{2-5})?$/i;
return telRegExp.test(telephoneNumber);
}
function isValidPostalCode(postalCode)
{
var pcodeRegExp=/^(d{5}(-d{4})?|([a-z][a-z]?dd?|[a-z{2}d[a-z])?d[a-z][a-z])$/i;
return pcodeRegExp.test(postalCode);
}
function isValidEmail(emailAddress)
{
var emailRegExp=/^(([^<>()[].,;:@"x00-x20x7F]|.)+|("" "([^x0Ax0D"]|\)+" ""))@(([a-z]|#d+?)([a-z0-9-]|#d+?)*([a-z0-9]|#d+?).)+([a-z]{2,4})$/i;
return emailRegExp.test(emailAddress);
}
例子,简单的正则表达式测试器
复制代码 代码示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Regular Expression Tester-www.jb200.com</title>
<style type="text/css">
body,td,th
{
font-family:Arial,Helvetica,sans-serif;
}
</style>
<script type="text/javascript">
function getRegExpFlags()
{
var regExpFlags='';
if(document.form1.chkGlobal.
checked)
regExpFlags='g';
if(document.form1.chkCaseInsensitive.checked)
regExpFlags +='i';
if(document.form1.chkMultiLine.checked)
regExpFlags +='m';
return regExpFlags;
}
function doTest()
{
var testRegExp=new RegExp(document.form1.txtRegularExpression.value,getRegExpFlags());
if(testRegExp.test(document.form1.txtTestString.value))
document.form1.txtTestResult.value="Match Found! ";
else
document.form1.txtTestResult.value="Match Not Found";
}
function findMatches()
{
var testRegExp=new RegExp(document.form1.txtRegularExpression.value,getRegExpFlags());
var myTestString=new String(document.form1.txtTestString.value);
var matchArray=myTestString.match(testRegExp);
document.form1.txtTestResult.value=matchArray.join('n');
}
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<p>
Regular Expression:<br />
<label>
<input name="txtRegularExpression" type="text" id="txtRegularExpression" size="100" value=""/>
<br />
Global
<input name="chkGlobal" type="
checkbox" id="chkGlobal" value="true" />
</label>
Case Insensitive
<label>
<input name="chkCaseInsensitive" type="checkbox" id="chkCaseInsensitive" value="true"/>
</label>
Multi Line
<label>
<input name="chkMultiLine" type="checkbox" id="chkMultiLine" value="true"/>
</label>
</p>
<p>
<label>
Test Text:<br />
<textarea name="txtTestString" id="txtTestString" cols="100" rows="8"></textarea>
</label>
</p>
<p>
Result:<br />
<textarea name="txtTestResult" id="txtTestResult" cols="100" rows="8"></textarea>
</p>
<p>
<label>
<input type="button" name="cmdTest" id="cmdTest" value="TEST" onclick="doTest();"/>
</label>
<label>
<input type="button" name="cmdMatch" id="cmdMatch" value="MATCH" onclick="findMatches();"/>
</label>
<label>
<input type="reset" name="cmdClearForm" id="cmdClearForm" value="RESET FORM" />
</label>
</p>
<p> </p>
</form>
</body>
</html>