电脑技术学习

JS的正则表达式详解

dn001

正则表达式到底是什么东西:

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码;很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像010-12345678或0376-7654321)。他的表达式就可以写成; /0d{2,3}-d{7,8}/ ,当然这样写会有个问题 就是可能出现 3(位)-7(位)、 4(位)-8(位),所以我们必须分开来这样写 /0d{3}-d{7}|0d{2}-d{8}/;

一 javascript正则表达式的基本知识

1;;javascript 正则对象创建 和用法

声明javascript 正则表达式

var reCat = new RegExp(”cat”);
你也可以
var reCat = /cat/;;;;//Perl 风格(推荐)

2 学习最常用的 test exec match search; replace; split 6个方法

1) test; 检查指定的字符串是否存在

var data = “123123″;
var reCat = /123/gi;
alert(reCat.test(data))//true

//检查字符是否存在; g 继续往下走; i 不区分大小写

2) exec 返回查询值

var data = “123123,213,12312,312,3,Cat,cat,dsfsdfs,”;
var reCat = /cat/i;
alert(reCat.exec(data))//Cat

3)match; 得到查询数组

var data = “123123,213,12312,312,3,Cat,cat,dsfsdfs,”;
var reCat = /cat/gi;
var arrMactches = data.match(reCat)

for (var i=0;i < arrMactches.length ; i++)
{
alert(arrMactches[i]);//Cat; cat
}

4) search; 返回搜索位置; 类似于indexof

var data = “123123,213,12312,312,3,Cat,cat,dsfsdfs,”;
var reCat = /cat/gi;
alert(data.search(reCat))//23

5) replace; 替换字符; 利用正则替换

var data = “123123,213,12312,312,3,Cat,cat,dsfsdfs,”;
var reCat = /cat/gi;
alert(data.replace(reCat,”libinqq”));

6)split利用正则分割数组

var data = “123123,213,12312,312,3,Cat,cat,dsfsdfs,”;
var reCat = /,/;
var arrdata = data.split(reCat);

for (var i = 0; i < arrdata.length; i++)
{
alert(arrdata[i]);
}

3; 学习下; 简单类负向类; 范围类; 组合类

//简单类
var data = “1libinqq,2libinqq,3libinqq,4libinqq”;
var reCat = /[123]libinqq/gi;
var arrdata = data.match(reCat);

for (var i = 0; i < arrdata.length; i++)
{
alert(arrdata[i])// 1libinqq 2libinqq; 3libinqq
}

//负向类
var data = “alibinqq,1libinqq,2libinqq,3libinqq,4libinqq”//u0062cf
var reCat = /[^a123]libinqq/gi;
var arrdata = data.match(reCat);

for (var i = 0; i < arrdata.length; i++)
{
alert(arrdata[i])//4libinqq
}

//范围类
var data = “libinqq1,libinqq2,libinqq3,libinqq4,libinqq5″//u0062cf
var reCat = /libinqq[2-3]/gi;
var arrdata = data.match(reCat);

for (var i = 0; i < arrdata.length; i++)
{
alert(arrdata[i]);// libinqq2; libinqq3
}

//组合类
var data = “a,b,c,w,1,2,3,5″//u0062cf
var reCat = /[a-q1-4n]/gi;
var arrdata = data.match(reCat);

for (var i = 0; i < arrdata.length; i++)
{
alert(arrdata[i])// a b c 1 2 3
}

下面是一些常用的JS正则表达式:

//校验是否全由数字组成

function isDigit(s)
{
var patrn=/^[0-9]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}

//校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串

function isRegisterUserName(s)
{
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;
if (!patrn.exec(s)) return false
return true
}//校验用户姓名:只能输入1-30个以字母开头的字串

function isTrueName(s)
{
var patrn=/^[a-zA-Z]{1,30}$/;
if (!patrn.exec(s)) return false
return true
}
}}

//校验密码:只能输入6-20个字母、数字、下划线
function isPasswd(s)
{
var patrn=/^(w){6,20}$/;
if (!patrn.exec(s)) return false
return true
}
//校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”
function isTel(s)
{
//var patrn=/^[+]{0,1}(d){1,3}[ ]?([-]?(d){1,12})+$/;
var patrn=/^[+]{0,1}(d){1,3}[ ]?([-]?((d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
//校验手机号码:必须以数字开头,除数字外,可含有“-”
function isMobil(s)
{
var patrn=/^[+]{0,1}(d){1,3}[ ]?([-]?((d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
//校验邮政编码
function isPostalCode(s)
{
//var patrn=/^[a-zA-Z0-9]{3,12}$/;
var patrn=/^[a-zA-Z0-9 ]{3,12}$/;
if (!patrn.exec(s)) return false
return true
}
//校验搜索关键字
function isSearch(s)
{
var patrn=/^[^`~!@#$%^&*()+=|][]{}:;',.<>/?]{1}[^`~!@$%^&()+=|]
[]{}:;',.<>?]{0,19}$/;
if (!patrn.exec(s)) return false
return true
}

function isIP(s) //by zergling
{
var patrn=/^[0-9.]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
正则表达式
"^d+$"  //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$"  //正整数
"^((-d+)|(0+))$"  //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$"  //负整数
"^-?d+$"    //整数
"^d+(.d+)?$"  //非负浮点数(正浮点数 + 0)
"^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$"
//正浮点数
"^((-d+(.d+)?)|(0+(.0+)?))$"  //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$"
//负浮点数
"^(-?d+)(.d+)?$"  //浮点数
"^[A-Za-z]+$"  //由26个英文字母组成的字符串
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串
"^[a-z]+$"  //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串
"^w+$"  //由数字、26个英文字母或者下划线组成的字符串
"^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$"    //email地址
"^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$"  //url
"^[A-Za-z0-9_]*$"。