恰恰则上笔记。正则表达式的季杀操作(匹配,切割,替换,获取)

文星家:  ? *  +  即 01次、0多次、1多次

 

 

这里只介绍js中对正则表达式的相干操作,关于正则表达式的详实介绍,请参考
http://manual.phpv.net/regular\_expression.html

^                  匹配起始端

相同、js中正则表达式操作

$                  匹配结尾处

1、定义正则表达式

.                  匹配任意单单字符,但换行符除外

1)定义正则表达式有半点栽形式,一栽是普通方式,一种植是构造函数方式。
2)普通方式:var
reg=/表达式/附加参数
 附加参数:用来扩充表达式的意义,目前要出三只参数:
g:代表可以展开全局匹配。
i:代表不区分轻重缓急写匹配。
m:代表可以开展多执匹配。 例子:
var reg=/a*b/;
var reg=/abc+f/g;
3)构造函数方式:var
reg=new RegExp(“表达式”,”附加参数”);
 例子:
var reg=new RegExp(“a*b”);
var reg=new RegExp(“abc+f”,”g”);
4)普通方式同构造函数方式的分别
通常方式被的表达式必须是一个常量字符串,而构造函数中之表达式可以是常量字符串,也得以是一个js变量,例如根据用户之输入来作表达式参数等等:
var reg=new RegExp(document.forms[0].exprfiled.value,”g”);

(x)              匹配x并记住x,前提是相当

2、表达式操作,在这里是恃与表达式相关的不二法门,我们拿介绍六独主意。

(?:x)          匹配x但非记住x

1)表达式对象(RegExp)方法:
1>exec(str),返回str中与表达式相匹配的率先独字符串,而且为数组的款式展现,当然要表达式中寓捕捉用的小括号,则回的数组中呢可能带有()中的匹配字符串,例如:
var regx=/\d+/;
var rs=regx.exec(“3432ddf53”);
返回的rs值为:{3432}
var regx2=new RegExp(“ab(\d+)c”);
var rs2=regx2.exec(“ab234c44”);
返回的rs值为:{ab234c,234}
另外,如果来差不多只当的匹配,则率先涂鸦执行exec返回一个先是个门当户对,此时继续执行exec,则相继返回第二只第三只门当户对。例如:
var regx=/user\d/g;
var rs=regx.exec(“ddduser1dsfuser2dd”);
var rs1=regx.exec(“ddduser1dsfuser2dd”);
虽然rs的价值吗{user1},rs的价为{rs2},当然注意regx中的g参数是必的,否则无论exec执行多少坏,都回来第一单门当户对。后面还有相关内容涉及到对是想象的解释。
2>test(str),判断字符串str是否配合表达式,返回一个布尔值。例如:
var regx=/user\d+/g;
var flag=regx.test(“user12dd”);
flag的值为true。

X(?=y)    
        匹配x,仅当背后紧跟着y时。如果符合匹配,则只有x会被记住,y不会见为铭记。

2)String对象方法
1>match(expr),返回跟expr相匹配的一个字符串数组,如果无加参数g,则赶回第一单相当,加入参数g则归所有的匹配
例子:
var regx=/user\d/g;
var str=“user13userddduser345”;
var rs=str.match(regx);
rs的值为:{user1,user3}
2>search(expr),返回字符串中与expr相兼容的首先单相当的index值。
例子:
var regx=/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=/user\d/g;
var str=“user13userddduser345”;
var rs=str.replace(regx,”00”);
rs的值为:003userddd0045
例子2:
var regx=/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=/user\d/g;
var str=“user13userddduser345”;
var rs=str.split(regx);
rs的值为:{3userddd,45}

X(?!y)                匹配x,仅当后面不从y时。如果符合匹配,则只有x会被铭记,y不会见让记住。

2、表达式相关属性

x|y                匹配x或y。注意如果x和y都配合上了,那么单纯记住x。

1)表达式相关属性,是恃与表达式相关的特性,如下面的款式:
var regx=/myexpr/;
var rs=regx.exec(str);
其中,和表达式自身regx相关的性有一定量只,和表达式匹配结果rs相关的性质有三个,下面将逐一介绍。
2)和表达式自身有关的简单个属性:
1>lastIndex,返回开始下一个匹的职务,注意得是大局匹配(表达式中包含g参数)时,lastIndex才会出随地返回下一个相当配值,否则该值为连续回到第一只下一个匹岗位,例如:
var regx=/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=/user\d/g,则率先个也9,第二个也18,第三单为0。
2>source,返回表达式字符串自身。例如:
var regx=/user\d/;
var rs=regx.exec(“sdsfuser1dfsfuser2”);
var source=regx.source;
source的值为user\d
3)和相当结果相关的老三个属性:
1>index,返回时配合的职务。例如:
var regx=/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=/user\d/;
var rs=regx.exec(“sdsfuser1dfsfuser2”);
var input=rs.input;
input的值为sdsfuser1dfsfuser2。
3>[0],返回匹配结果受到之首先个门当户对配值,对于match而言可能回一个多值的数字,则除外[0]外,还好赢得[1]、[2]等等。例如:
var regx=/user\d/;
var rs=regx.exec(“sdsfuser1dfsfuser2”);
var value1=rs[0];
rs=regx.exec(“sdsfuser1dfsfuser2”);
var value2=rs[0];
value1的价为user1,value2的值也user2 3、实际用 1)实际使用相同
讲述:有同等表单,其中起一个“用户名”input域
要求:汉字,而且无克简单2独汉字,不可知多于4独字。 <script>
function checkForm(obj){
var username=obj.username.value;
var regx=/^[\u4e00-\u9fa5]{2,4}$/g
if(!regx.test(username)){
alert(“Invalid username!”);
return false;
}
return true; </script>
<form name=“myForm”onSubmit=“return checkForm(this)”>
<input type=“text” name=“username”/>
<input type=“submit” vlaue=“submit”/>
</form>
2)实际使用二
叙:给得一个包含html标记的字符串,要求用中间的html标记去掉。
<script>
function toPlainText(htmlStr){
var regx=/<[^>]*>|<\/[^>]*>/gm;
var str=htmlStr.replace(regx,””);
return str; </script>
<form name=“myForm”>
<textarea id=“htmlInput”></textarea>
<input type=“button” value=“submit”
onclick=“toPlainText(document.getElementByIdx_x(‘htmlInput’).value”/>
</form> 二、小结 1,Javascript
正则表达式,我思以一般的程序员之中,使用者应当无是无数,因为咱们处理的页面一般还不是格外复杂,而复杂的逻辑一般我们且以后台处理到位了。但是目前来头
已经冒出了扭转,富客户端已经让进一步多的人口接受,而Javascript就是里面的关键技术,对于复杂的客户端逻辑而言,正则表达式的企图为是甚重点
的,同时它也是Javascript高手必须使掌握的重大技术有。
2,为了能够方便大家对前面讲述的情有一个更为综合及浓的认,我将眼前的部分关键点和易于犯糊涂的地方又网总结一下,这有的老重大!

{n}                匹配前一个字符的n次出现

小结1:附件参数g的用法
表达式加上参数g之后,表明可以拓展全局匹配,注意这里“可以”的意义。我们详细描述:
1)对于表达式对象的exec方法,不加入g,则止回第一只门当户对,无论执行稍微坏全是如此,如果加入g,则第一不好实行也回第一单相当,再实行回第二只门当户对,依次类推。例如
var regx=/user\d/;
var str=“user18dsdfuser2dsfsd”;
var rs=regx.exec(str);//此时rs的值为{user1}
var rs2=regx.exec(str);//此时rs的价依然为{user1}
如果regx=/user\d/g;则rs的值为{user1},rs2的值为{user2}
经之事例说明:对于exec方法,表达式加入了g,并无是说执行exec方法就是可回到所有的配合,而是说进入了g之后,我得以经过某种方式赢得所有的匹配,这里的“方式”对于exec而言,就是逐一执行之办法即可。
2)对于表达式对象的test方法,加入g于不加上g没有啊分别。
3)
对于String对象的match方法,不加入g,也无非是回第一单相当,一直推行match方法吧接连回到第一独相当,加入g,则一律糟糕回到所有的匹配
(注意及时跟表达式对象的exec方法不同,对于exec而言,表达式即使加上了g,也无见面雷同不成回所有的配合)。例如:
var regx=/user\d/;
var str=“user1sdfsffuser2dfsdf”;
var rs=str.match(regx);//此时rs的值为{user1}
var rs2=str.match(regx);//此时rs的价值依然为{user1}
如果regx=/user\d/g,则rs的值也{user1,user2},rs2的值吗为{user1,user2}
4)对于String对象的replace方法,表达式不加入g,则独自替换第一单相当,如果加入g,则替换所有匹配。(开头的老三志测试题会杀好之证实这或多或少)
5)对于String对象的split方法,加上g与匪加g是一律的,即:
var sep=/user\d/;
var array=“user1dfsfuser2dfsf”.split(sep);
则array的值为{dfsf, dfsf}
此时sep=/user\d/g,返回值是同等的。
6)对于String对象的search方法,加不加g也是平的。

{n,}                匹配前一个字符的至少n次出现

小结2:附加参数m的用法
叠加参数m,表明可以进行多尽匹配,但是这个只有当使用^和$模式时才见面起作用,在另外的模式遭遇,加不参加m都可以进行多执行匹配(其实说多行的字符串也是一个平常字符串),我们举例说明这或多或少
1)使用^的例子
var regx=/^b./g;
var str=“bd76 dfsdf
sdfsdfs dffs
b76dsf sdfsdf”;
var rs=str.match(regx);

时加入g和不加入g,都只有回第一个门当户对{bd},如果regx=/^b./gm,则赶回所有的相当{bd,b7},注意要regx=/^b./m,则
也就回去第一独相当。所以,加入m表明可以拓展多执行匹配,加入g表明可以进行全局匹配,综合及同就是足以展开多履全局匹配
2)使用另外模式之例子,例如
var regx=/user\d/;
var str=“sdfsfsdfsdf
sdfsuser3 dffs
b76dsf user6”;
var rs=str.match(regx);
这勿加参数g,则归{user3},加入参数g返回{user3,user6},加不加入m对斯没有影响。
3)因此对此m我们只要了解她的利用,记住它们只有对^和$模式起作用,在当时简单栽模式面临,m的意图也:如果未加入m,则只能在第一推行开展匹配,如果进入m则可以当具有的执行开展匹配。我们还拘留一个^的例证
var regx=/^b./;
var str=“ret76 dfsdf
bjfsdfs dffs
b76dsf sdfsdf”;
var rs=str.match(regx);

时rs的值为null,如果加入g,rs的价值仍然为null,如果加入m,则rs的价为{bj}(也就是说,在第一执行并未找到匹配,因为发参数m,所以只是
以持续错过脚的行去找是否有配合),如果m和g都助长,则归{bj,b7}(只加m不加g说明,可以去大半行开展匹配,但是找到一个匹配后即赶回,加

g表明将大半行被保有的相当返回,当然对match方法是这般,对于exec呢,则需要实践多次才会挨个返回)

{n,m}                匹配前一个字符的起码n次最多m次的出现

总结3:在HTML的textarea输入域中,按一个Enter键,对应之控制字符为“\r\n”,即“回车换行”,而未是“\n\r”,即“换行回车”,我们看一个前我们选过的例子:
var regx=/a\r\nbc/;
var str=“a
bc”;
var rs=regx.exec(str);
结果:匹配成功,rs的价值吗:{ 

[xyz]                xyz表示一个字符串,该模式表示相当[]丁之一个字符,形式上[xyz]等同于[x-z]

      },如果表达式为/a\n\rbc/,则免会见于匹配,因此于形似的编辑器中一个”Enter”键表示在“回车换行”,而无“换行回车”,至少在

[^xyz]                该模式代表匹配非[]遭受的一个字符,形式上[^xyz]等同于[^x-z]

[\b]                匹配退格键

\b                匹配一个词的边界符,例如空格和换行符等等,当然匹配换行符时,表达式应该增大参数m

 

var regx=/\bc./;

var rs=regx.exec(“Beijing is a beautiful city”);

结果:匹配成功,rs的值也:{ci},注意c前边的空格不见面配合到结果丁,即{
ci}是勿科学的。

 

\B                代表一个非单词边界。

\cX                匹配一个控制字符

\d                匹配一个数字字符,等同于[0-9]

\D                匹配一个非数字字符,等同于[^0-9]

\f                匹配一个换页符

\n                匹配一个换行符。因为是换行符,所以在表达式中使加入m参数

\r                匹配一个回车符

\s                匹配一个空格符,等同于[
\f\n\r\t\v\u00A0\u2028\u2029]

\S                匹配一个非空格符,等同于[
^\f\n\r\t\v\u00A0\u2028\u2029]

\t                匹配一个tab

\v                匹配一个竖向的tab

\w                匹配一个数字、_或字母表字符,即[A-Za-z0-9_ ]

\W                匹配一个非数字、_要字母表字符,即[^A-Za-z0-9_ ]

\n                注意勿是\n,这里n是一个恰好整数,表示相当第n个()中之字符

\0                匹配一个NUL字符。

\xhh                匹配一个出于简单员16进制数字所发挥的字符。

\uhhhh                匹配一个由四各类16进制数字所发表的字符。

 

 

g:代表可以拓展全局匹配。

i:代表不区分轻重缓急写匹配。

m:代表可以展开多履行匹配。

 

 

1>exec(str),返回str中及表达式相兼容的首先个字符串,而且以数组的款式表现,当然要表达式中涵盖捕捉用底小括号,则归的数组中为说不定含有()中之匹配字符串

 

 

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

 

1>match(expr),返回跟expr相匹配的一个字符串数组,如果无加参数g,则赶回第一独相当,加入参数g则归所有的匹配

 

 

2>search(expr),返回字符串中与expr相兼容的首先独相当的index值

 

3>replace(expr,str),将字符串中匹配expr的片替换为str。另外在replace方法中,str中得涵盖一栽变量符号$,格式为$n,代表匹配中叫铭记的第n的匹配字符串(注意小括声泪俱下可以记匹配)。

对replace(expr,str)方法还要特别注意一点,如果expr是一个表达式对象则会展开全局替换(此时表达式必须附加参数g,否则也就是替换第一只门当户对),如果expr是一个字符串对象,则独自见面交替第一个门当户对的一对

 

 

4>split(expr),将字符串以匹配expr的部分做分割,返回一个再三组,而且表达式是否附加参数g都无涉嫌,结果是一模一样的

 

 

 

 

2)和表达式自身相关的鲜独特性:

 

1>lastIndex,返回开始产一个郎才女貌的职位,注意要是全局匹配(表达式中含g参数)时,lastIndex才见面时有发生不断返回下一个匹配值,否则该值为连回到第一独下一个郎才女貌岗位

 

2>source,返回表达式字符串自身

 

 

3)和配合结果相关的老三独特性:

 

1>index,返回时相当的职务

var regx=/user\d/;

var rs=regx.exec(“sdsfuser1dfsfuser2”);

var index1=rs.index;

 

 

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

var regx=/user\d/;

var rs=regx.exec(“sdsfuser1dfsfuser2”);

var input=rs.input;

input的值为sdsfuser1dfsfuser2。

 

 

3>[0],返回匹配结果受之第一个门当户对配值,对于match而言可能回一个多值的数字,则除外[0]他,还足以赢得[1]、[2]等等。例如:

var regx=/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只字。

实现:

<script>

function checkForm(obj){

     var username=obj.username.value;

     var regx=/^[\u4e00-\u9fa5]{2,4}$/g

     if(!regx.test(username)){

               alert(“Invalid username!”);

               return false;

     }

     return true;

}

</script>

<form name=“myForm”onSubmit=“return checkForm(this)”>

    <input type=“text” name=“username”/>

    <input type=“submit” vlaue=“submit”/>

</form>

2)实际运用二

讲述:给得一个饱含html标记的字符串,要求以其中的html标记去掉。

实现:

<script>

function toPlainText(htmlStr){

     var regx=/<[^>]*>|<\/[^>]*>/gm;

     var str=htmlStr.replace(regx,””);

     return str;

}

</script>

<form name=“myForm”>

    <textarea id=“htmlInput”></textarea>

    <input type=“button” value=“submit”
onclick=“toPlainText(document.getElementById(‘htmlInput’).value”/>

</form>