您的位置:首页 > Web前端 > JavaScript

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

2016-11-27 20:56 453 查看
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 is
alert(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-9
var str='6oole';
alert(pattern.test(str));  //true


(2)^、*
^表示非,*表示任意——以[^0-9]*为例
var pattern=/[^0-9*]oogle/;    //[^0-9*]表示匹配任意个非数字0-9
var 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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息