详解js正则表达式语法介绍(9)

则rs的值为{user1},rs的值为{rs2},当然注意regx中的g参数是必须的,否则无论exec执行多少次,都返回第一个匹配。后面还有相关内容涉及到对此想象的解释。

2>test(str),判断字符串str是否匹配表达式,返回一个布尔值。例如:

var regx=https://www.jb51.net/user/d+/g; var flag=regx.test(“user12dd”);

flag的值为true。

3)String对象方法

1>match(expr),返回与expr相匹配的一个字符串数组,如果没有加参数g,则返回第一个匹配,加入参数g则返回所有的匹配

例子:

var regx=https://www.jb51.net/user/d/g; var str=“user13userddduser345”; var rs=str.match(regx);

rs的值为:{user1,user3}

2>search(expr),返回字符串中与expr相匹配的第一个匹配的index值。

例子:

var regx=https://www.jb51.net/user/d/g; var str=“user13userddduser345”; var rs=str.search(regx);

rs的值为:0

3>replace(expr,str),将字符串中匹配expr的部分替换为str。另外在replace方法中,str中可以含有一种变量符号$,格式为$n,代表匹配中被记住的第n的匹配字符串(注意小括号可以记忆匹配)。

例子:

var regx=https://www.jb51.net/user/d/g; var str=“user13userddduser345”; var rs=str.replace(regx,”00”);

rs的值为:003userddd0045

例子2:

var regx=https://www.jb51.net/u(se)r/d/g; var str=“user13userddduser345”; var rs=str.replace(regx,”$1”);

rs的值为:se3userdddse45

对于replace(expr,str)方法还要特别注意一点,如果expr是一个表达式对象则会进行全局替换(此时表达式必须附加参数g,否则也只是替换第一个匹配),如果expr是一个字符串对象,则只会替换第一个匹配的部分,例如:

var regx=“user” var str=“user13userddduser345”; var rs=str.replace(regx,”00”);

rs的值为: 0013userddduser345

4>split(expr),将字符串以匹配expr的部分做分割,返回一个数组,而且表达式是否附加参数g都没有关系,结果是一样的。

例子:

var regx=https://www.jb51.net/user/d/g; var str=“user13userddduser345”; var rs=str.split(regx);

rs的值为:{3userddd,45}

4,表达式相关属性

1)表达式相关属性,是指和表达式相关的属性,如下面的形式:

var regx=https://www.jb51.net/myexpr/; var rs=regx.exec(str);

其中,和表达式自身regx相关的属性有两个,和表达式匹配结果rs相关的属性有三个,下面将逐一介绍。

2)和表达式自身相关的两个属性:

1>lastIndex,返回开始下一个匹配的位置,注意必须是全局匹配(表达式中带有g参数)时,lastIndex才会有不断返回下一个匹配值,否则该值为总是返回第一个下一个匹配位置,例如:

var regx=https://www.jb51.net/user/d/; var rs=regx.exec(“sdsfuser1dfsfuser2”); var lastIndex1=regx.lastIndex; rs=regx.exec(“sdsfuser1dfsfuser2”); var lastIndex2=regx.lastIndex; rs=regx.exec(“sdsfuser1dfsfuser2”); var lastIndex3=regx.lastIndex;

上面lastIndex1为9,第二个lastIndex2也为9,第三个也是9;如果regx=https://www.jb51.net/user/d/g,则第一个为9,第二个为18,第三个为0。

2>source,返回表达式字符串自身。例如:

var regx=https://www.jb51.net/user/d/; var rs=regx.exec(“sdsfuser1dfsfuser2”); var source=regx.source; source的值为user/d

3)和匹配结果相关的三个属性:

1>index,返回当前匹配的位置。例如:

var regx=https://www.jb51.net/user/d/; var rs=regx.exec(“sdsfuser1dfsfuser2”); var index1=rs.index; rs=regx.exec(“sdsfuser1dfsfuser2”); var index2=rs.index; rs=regx.exec(“sdsfuser1dfsfuser2”); var index3=rs.index;

index1为4,index2为4,index3为4,如果表达式加入参数g,则index1为4,index2为13,index3会报错(index为空或不是对象)。

2>input,用于匹配的字符串。例如:

var regx=https://www.jb51.net/user/d/; var rs=regx.exec(“sdsfuser1dfsfuser2”); var input=rs.input;


input的值为sdsfuser1dfsfuser2。

3>[0],返回匹配结果中的第一个匹配值,对于match而言可能返回一个多值的数字,则除了[0]外,还可以取[1]、[2]等等。例如:

var regx=https://www.jb51.net/user/d/; var rs=regx.exec(“sdsfuser1dfsfuser2”); var value1=rs[0]; rs=regx.exec(“sdsfuser1dfsfuser2”); var value2=rs[0];

value1的值为user1,value2的值为user2

5,实际应用

1)实际应用一

描述:有一表单,其中有一个“用户名”input域

要求:汉字,而且不能少于2个汉字,不能多于4个汉字。
实现:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjsszw.html