正则表达式(一)

来源:互联网 发布:书包 淘宝 编辑:程序博客网 时间:2024/04/29 10:11

一、概念

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
1. 灵活性、逻辑性和功能性非常的强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。

3. 对于刚接触的人来说,比较晦涩难懂。

二、javascript中正则表达式的用法

以下测试代码,使用的是以IE10为内核的360浏览器。其中有些部分,跟其他版本浏览器可能会有些差别,如:有关死循环的一些例子。

1、RegExp对象

RegExp对象表示正则表达式,它是对字符串执行模式匹配的强大工具。javascript创建RegExp对象的两种方式:

1.1 隐式创建  var strRule = /正则表达式/修饰符

修饰符可取值:g、i、m
i 执行对大小写不敏感的匹配。 
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 
m 执行多行匹配。 

示例:在字符串中查找四个连续的数字

<script type="text/javascript">var str = "ssssssssssss443434 dddddddddddddddddds 43434ssssdd3333ssdfd 8888sdsfdsf";var strRule = /(\d){4}/gi;while(res=strRule.exec(str)){alert("匹配到"+res[0]);}</script>

1.2 显示创建 var strRule = new RegExp("正则表达式","修饰符");

注意:这里正则表达式中的“\”要进行转义
示例:在字符串中查找四个连续的数字
<script type="text/javascript">var str = "ssssssssssss443434 dddddddddddddddddds 43434ssssdd3333ssdfd 8888sdsfdsf";var strRule = new RegExp("(\\d){4}","gi");while(res=strRule.exec(str)){alert("匹配到"+res[0]);}</script>

2、RegExp对象的方法

2.1 test 检索字符串中指定的值。返回 true 或 false。 

<script type="text/javascript">var str = "风萧萧兮易水寒,壮士一去兮不复还!";var strRule = /壮士/;if(strRule.test(str)){alert("有壮士!");}else{alert("没有壮士!");}</script>

2.2 exec 检索字符串中指定的值。返回找到的值,并确定其位置。

exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方法更为复杂。
如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看得出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。
但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。

提示和注释
重要事项:如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0。
提示:请注意,无论 RegExpObject 是否是全局模式,exec() 都会把完整的细节添加到它返回的数组中。这就是 exec() 与 String.match() 的不同之处,后者在全局模式下返回的信息要少得多。因此我们可以这么说,在循环中反复地调用 exec() 方法是唯一一种获得全局模式的完整模式匹配信息的方法。

3、和正则表达式相关的字符串方法

3.1 search 检索与正则表达式相匹配的值。

示例:
<script type="text/javascript">var str = "风萧萧兮易水寒,壮士一去兮不复还!";var strRule = /壮士/;alert(str.search(strRule));</script>

3.2 match 找到一个或多个正则表达式的匹配。返回符合条件的数组。这个方法比较常用。

这个方法的返回值,与正则表达式对象是否含有修饰符g有关。不含g时,那么 match() 方法就只能在 stringObject 中执行一次匹配。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在stringObject 中的位置,input 属性声明的是对 stringObject 的引用。含g时,返回的数组没有index和input属性。
示例:含g时
<script type="text/javascript">var str = "ssssssssssss443434 dddddddddddddddddds 43434ssssdd 3333ssdfd 8888sdsfdsf";var strRule = new RegExp("(\\d){4}","gi");var arr = str.match(strRule);//正则表达式对象含修饰符g时,返回的数组没有index和input属性document.write(arr);//documnet.write(arr.index);错误</script>
示例:不含g时
<script type="text/javascript">var str = "ssssssssssss443434 dddddddddddddddddds 43434ssssdd 3333ssdfd 8888sdsfdsf";var strRule = new RegExp("(\\d){4}","");var arr = str.match(strRule);//不含g时document.write(arr+"<br />");document.write(arr.index+"<br />");document.write(arr.input+"<br />");</script>

3.3 replace 替换与正则表达式匹配的子串。

示例:
<script type="text/javascript">var str = "ssssssssssss443434 dddddddddddddddddds 43434ssssdd3333ssdfd 8888sdsfdsf";var strRule = new RegExp("(\\d){4}","gi");document.write(str.replace(strRule,"这里原来有四个数"));</script>

0 0
原创粉丝点击