Javascript高级程序设计——9.正则表达式(1)

来源:互联网 发布:淘宝怎么搜假手表 编辑:程序博客网 时间:2024/04/30 06:16

1、正则表达式

(1)定义:描述字符模式的对象

ECMAScript的RegExp类表示正则表达式

(2)作用:验证客户端的输入函数,即在用户填写完表单单击按钮后,表单被发送到服务器,在服务器端通       常用php,asp.net语言对其进行进一步的验证。


2、创建正则表达式(2种)

(1)new关键字

(2)采用字面量方式(打印出来的为字面量)

var box=new RegExp('Box');  //第一个参数是模式字符串;alert(box);   //结果——"/Box/"//两个反斜杠就是正则表达式字面量表示方法;

var box=new RegExp('Box','gi');  //第二个参数为可选;alert(box);

(3)模式修饰符(可选参数)

a、i——忽略大小写

b、g——全局匹配

c、m——多行匹配

var box='/Box/';alert(box);

3、测试正则表达式

A、RegExp

2种:test()/exec()

结果——均返回布尔值true、false


(1)test():用于匹配字符串

var pattern=new RegExp('Box');  //模式;var str='box';alert(pattern.test(str));
结果:false,由于大小写不一致

var pattern=new RegExp('Box','i');  //不区分大小写;var str='box';alert(pattern.test(str));
结果:true,一句话匹配


var pattern=/Box/i;         //使用字面量方式var str='box';alert(pattern.test(str));
结果:true



(2)exec():用于匹配数组

(若匹配到,则返回数组;若没匹配到,返回null)

var pattern=/Box/i;         //使用字面量方式var str='sss';alert(pattern.test(str));
结果:如果没匹配到,返回null



B、String对象

4种:match()——返回pattern中子串或null

     replace()——用新元素替换旧元素

     search()——返回字符串中开始的位置

     split()——返回字符串按指定pattern拆分的数组


(1)match()获取数组

a、ig:全局

var pattern=/Box/ig;   //全局搜索;var str='This is a Box!This is a Box!';alert(str.match(pattern));   //将所有匹配到的字符串组合成数组返回;

b、i:不是全局

var pattern=/Box/i;   //没有开启全局搜索;var str='This is a Box!This is a Box!';alert(str.match(pattern));    //匹配到第一个字符串返回数组;

(2)search查找匹配数组

var pattern=/xox/i;   //没有开启全局搜索;var str='This is a Box!This is a Box!';alert(str.search(pattern));    //找不到匹配,返回-1;

(3)replace替换数组

var pattern=/Box/i;   //没有开启全局搜索;var str='This is a Box!This is a Box!';alert(str.replace(pattern,'Tom'));    //返回替换的字符串,只替换了第一个;

var pattern=/Box/ig;   //全局搜索;var str='This is a Box!This is a Box!';alert(str.replace(pattern,'Tom'));   //返回替换的字符串,替换了两个;

(4)split表示拆分数组



4、RegExp属性

(1)静态属性

var pattern=/(g)oogle/;var str='This is google';pattern.test(str);    //执行一下;alert(RegExp.input);     //This is google!alert(RegExp.leftContext);   //This isalert(RegExp.rightContext);   //!alert(RegExp.lastMatch);   //goole;(匹配最后一个)alert(RegExp.lastParen);    //g


(2)实例属性

google:全局

ignoreCase:区分大小写

lastIndex:上次匹配位置


var pattern=/google/ig;   alert(pattern.global);  //true,是否全局了;alert(pattern.ignoreCase);  //true,是否忽略大小写;alert(pattern.mulyiline);   //false,是否换行;alert(pattern.lastIndex);  //0,下次匹配位置;alert(pattern.source);//google,原字符串;



5、获取控制

(1)定义:正则表达式中的元字符是包含特殊含义的字符。

        (2)元字符可以控制匹配模式的方式,反斜杠后的元字符将失去其特殊含义

a、字符类

(1)单个字符或数字

.:点符号表示匹配除换行符外的任意字符

var pattern=/g..gle/;var str='google';alert(pattern.test(str));

(2)重复字符

x*:星号*表示前边那个字符x重复的0个或多个

x+:星号+表示前边那个字符x重复的1个或多个

x.?:问号.?表示前边的字符x重复的0个或1个

x{a,b}:{a,b}表示匹配前边的字符x重复(a,b)次

var pattern=/go{2,4}gle/;var str='gooole';alert(pattern.test(str));  //true

var pattern=/go{3}gle/;    //o{3}表示限定为3个var str='goooole';       alert(pattern.test(str));  //true

var pattern=/go{3,}gle/;    //o{3,}表示限定为3个及3个以上var str='goooole';       alert(pattern.test(str));  //true

(3)单个字符

[a-z]:表示26个小写字母,任意一个都可以匹配

[A-Z]:表示26个大写字母,任意一个都可以匹配

(注意://i有i时,不限定大小写,为true)

var pattern=/[a-z]oogle/i;    //[a-z]表示匹配小写,有i后缀表示可不区分大小写var str='Goole';       alert(pattern.test(str));  //true,大写G,由于有后缀i




组合类型1——[a-zA-Z0-9]表示匹配括号中大小写的a-z、A-Z、0-9
var pattern=/[a-zA-Z0-9]oogle/;   var str='google';       alert(pattern.test(str));  //true

组合类型2——^[a-zA-Z0-9]表示匹配任意不在括号里大小写的a-z、A-Z、0-9

b、数字:
(1)简单的[0-9]
[0-9]:表示匹配0-9的10个数字
var pattern=/[0-9]oogle/;    //[0-9]表示匹配数字0-9var str='6oole';       alert(pattern.test(str));  //true


(2)^、*
^表示非,*表示任意——以[^0-9]*为例
var pattern=/[^0-9*]oogle/;    //[^0-9*]表示匹配任意个非数字0-9var str='google';       alert(pattern.test(str));  //true


(3)小写为正,大写为非
\d:匹配数字
\D:匹配非数字,同[^0-9]相同

\w:匹配字母、数字及_
\W:匹配非字母、数字及_


c、数字+字符组合类型
组合类型1——[a-zA-Z0-9]表示匹配括号中大小写的a-z、A-Z、0-9
var pattern=/[a-zA-Z0-9]oogle/;   var str='google';       alert(pattern.test(str));  //true

组合类型2——^[a-zA-Z0-9]表示匹配任意不在括号里大小写的a-z、A-Z、0-9


组合类型3——/^[a-z]oole[0-9]$/表示以a-z开头,以0-9结尾
var pattern=/^[a-z]oole[0-9]$/;var str='google';       alert(pattern.test(str));  //true


d、元字符
(1)\b:表示到达边界
(2)\|:表示匹配或选择模式

e、分组的概念
(1)单个字符
var pattern=/google{4,8}$/;  //表示e重复4-8次  var str='googleeeee';alert(pattern.test(str));

(2)字符串分组后,当成一个字符
var pattern=/(google){4,8}$/;  //分组,将google看成一个字符;var str='googlegooglegooglegoogle';alert(pattern.test());  //true


(3)RegExp.$1表示匹配模式中第一个分组对应的匹配字符串
var pattern=/8(.*)8/;var str='This is a 8google8';document.write(str.replace(pattern,'<strong>$1</strong>'));

f、贪婪模式+懒惰模式
(1)贪婪模式:“+”
var pattern=/[a-z]+/;    //+号表示使用了贪婪模式;var str='asdf';alert(pattern.test(str));  //所有字符串都变成了1;


(2)懒惰模式:“+?”
var pattern=/[a-z]+?/;    //+?号表示使用了惰性模式;var str='asdf';alert(pattern.test(str));  //只有第一个字符串都变成了1;

(3)应用:运用贪婪
var pattern=/8(.*)8/;var str='8google8 8google8 8google8';document.write(str.replace(pattern,'<strong>$1</strong>'));
结果:<strong>google8 8google8 8google</strong>



(4)禁止贪婪
var pattern=/8(.*?)8/;   //运用了惰性var str='8google8 8google8 8google8';document.write(str.replace(pattern,'<strong>$1</strong>'));
结果:<strong>google</strong>
<strong>google</strong>
<strong>google</strong>



0 0
原创粉丝点击