ECMAScriptJavaScript 正则表达式

正则表达式

 

修要:

1.呀是正则表达式

2.创正则表达式

3.抱控制

4.常用之正则

 

如若用户需要在HTML
表单中填入姓名、地址、出生日期等。那么在拿表单提交到服务器进一步处理前,JavaScript
程序会检查表单以确认用户真正输入了音信以这些信息是符合要求的。

 

一.什么是正则表达式

正则表达式(regular expression)是一个叙述字符模式之靶子。ECMAScript
的RegExp 类表示正则表达式,而String 和RegExp
都定义了以正则表达式进行强有力的模式匹配和文本检索与替换的函数。

正则表达式主要为此来证明客户端的输入数据。用户填写了表单单击按钮后,表单就会见给发送到服务器,在劳动器端通常会就此PHP、ASP.NET
等服务器脚本对那个进行更为处理。因为客户端验证,可以节约大量的劳动器端的系统资源,并且提供更好之用户体验。

 

二.创办正则表达式

缔造正则表达式和开创字符串类似,创建正则表达式提供了少于栽方式,一种植是运用new运算符,另一个凡是行使字面量方式。

 

1.点滴栽创建方式

 

var box = new RegExp(‘box’); //第一个参数字符串

var box = new RegExp(‘box’, ‘ig’); //第二只参数可选模式修饰符

 

模式修饰符的可选参数

 

参数 含义

 

i 忽略大小写

g 全局匹配

m 多尽匹配

 

var box = /box/; //直接用有限只反斜杠

var box = /box/ig; //在其次个斜杠后面长模式修饰符

 

2.测试正则表达式

RegExp
对象涵盖两单艺术:test()和exec(),功能为主相似,用于测试字符串匹配。test()方法以字符串中找是否在指定的正则表达式并回布尔值,如果存在则归true,不存则归false。exec()方法也用于在字符串中检索指定正则表达式,如果exec()方法执行成功,则归包含该查找字符串的相干信息数组。如果推行破产,则赶回null。

 

RegExp 对象的道

 

方法 功能

 

test 在字符串中测试模式匹配,返回true
或false

exec
在字符串中履行匹配搜索,返回结果数组

 

/*应用new 运算符的test 方法言传身教*/

var pattern = new RegExp(‘box’, ‘i’); //创建正则模式,不分轻重缓急写

var str = ‘This is a Box!’; //创建要比对的字符串

alert(pattern.test(str)); //通过test()方法求证是否配合

 

/*用字面量方式的test 方法言传身教*/(推介方式)

var pattern = /box/i; //创建正则模式,不分轻重缓急写

var str = ‘This is a Box!’;

alert(pattern.test(str));

 

/*下相同长达告词实现正则相当*/

alert(/box/i.test(‘This is a Box!’)); //模式和字符串替换掉了一定量只变量

 

/*使用exec 返回匹配数组*/

var pattern = /box/i;

var str = ‘This is a Box!’;

alert(pattern.exec(str)); //匹配了归来数组,否则回null

 

PS:exec 方法还发出外实际使用,我们以赢得控制学完后再行拘留。

 

3.运用字符串的正则表达式方法

而外test()和exec()方法,String 对象呢提供了4 个以正则表达式的道。

 

String 对象吃之正则表达式方法

方法 含义

match(pattern) 返回pattern
中之子串或null

replace(pattern, replacement)
用replacement 替换pattern

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

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

 

/*行使match 方法取得获取匹配数组*/

var pattern = /box/ig; //全局搜索

var str = ‘This is a Box!,That is a Box too’;

alert(str.match(pattern)); //匹配到片个Box,Box

alert(str.match(pattern).length); //获取数组的长度

 

/*动search 来索匹配数据*/

var pattern = /box/ig;

var str = ‘This is a Box!,That is a Box too’;

alert(str.search(pattern)); //查找到归位置,否则回-1

 

PS:因为search 方法查找到即返,也就是说无需g 全局

 

/*利用replace 替换匹配到之数码*/

var pattern = /box/ig;

var str = ‘This is a Box!,That is a Box too’;

alert(str.replace(pattern, ‘Tom’)); //将Box 替换成了Tom

 

/*行使split 拆分成字符串数组*/

var pattern = / /ig;

var str = ‘This is a Box!,That is a Box too’;

alert(str.split(pattern)); //将空格拆起来分做数组

 

RegExp靶的静态属性

 

属性 短名
含义

 

input $_
当前被匹配的字符串

lastMatch $&
最后一个匹配字符串

lastParen $+

最后一针对性圆括号内的匹配子串

leftContext $` 最后一糟糕匹配前之子串

multiline $*
用于指定是否具的表达式都用来多行的布尔值

rightContext $’ 在上次配合之后的子串

 

/*采用静态属性*/

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); //google

alert(RegExp.lastParen); //g

alert(RegExp.multiline); //false

 

PS:Opera 不支持input、lastMatch、lastParen 和multiline 属性。IE
不支持multiline 属性。

具有的习性可以以短名来操作RegExp.input
可以改写成RegExp[‘$_’],依次类推。但RegExp.input
比较特别,它还得形容成RegExp.$_。

 

RegExp靶的实例属性

 

属性 含义

 

global Boolean 值,表示g 是否曾经设置

ignoreCase Boolean 值,表示i
是否业已装

lastIndex
整数,代表下次相当将于哪里字符位置上马

multiline Boolean 值,表示m
是否曾装

Source 正则表达式的源字符串形式

 

/*利用实例属性*/

var pattern = /google/ig;

alert(pattern.global); //true,是否全局了

alert(pattern.ignoreCase); //true,是否忽略大小写

alert(pattern.multiline); //false,是否支持换行

alert(pattern.lastIndex); //0,下次的匹配岗位

alert(pattern.source); //google,正则表达式的源字符串

var pattern = /google/g;

var str = ‘google google google’;

pattern.test(str); //google,匹配第一差

alert(pattern.lastIndex); //6,第二次匹配的各项

 

PS:以上基本没什么用。并且lastIndex 在取下次配合岗位上IE
和其余浏览器有差错,主要表现于非全局匹配上。lastIndex
还支持手动设置,直接赋值操作。

 

三.博控制

正则表达式元字符是包含特殊含义的字符。它们来局部异常意义,可以操纵相当模式之

主意。反斜杠后的元字符将失去该特有含义。

 

字符类:单个字符和数字

 

元字符/元符号 匹配情况

 

. 匹配除换行符外的擅自字符

[a-z0-9]
匹配括号被之字符集中之即兴字符

[^a-z0-9]
匹配任意不在括号中之字符集中之字符

\d 匹配数字

\D 匹配非数字,同[^0-9]相同

\w 匹配字母和数字与_

\W 匹配非字母和数字和_

 

 

字符类:空白字符

 

元字符/元符号 匹配情况

 

\0 匹配null 字符

\b 匹配空格字符

\f 匹配进纸字符

\n 匹配换行符

\r 匹配回车字符

\t 匹配制表符

\s
匹配空白字符、空格、制表符和换行符

\S 匹配非空白字符

 

字符类:锚字符

 

元字符/元符号 匹配情况

 

^ 行首郎才女貌

$ 行尾匹配

\A 只发生相当配字符串开始处于

\b 匹配单词边界,词在[]内时不行

\B 匹配非单词边界

\G 匹配当前搜的起位置

\Z 匹配字符串结束处或行尾

\z 只相当配字符串结束处

 

字符类:重复字符

 

元字符/元符号 匹配情况

 

x? 匹配0 个或1 个x

x* 匹配0 个或擅自多单x

x+ 匹配至少一个x

(xyz)+ 匹配至少一个(xyz)

x{m,n} 匹配最少m 个、最多n 个x

 

字符类:替代字符

 

元字符/元符号 匹配情况

 

this|where|logo 匹配this 或where 或logo
中随意一个

 

 

 

字符类:记录字符

 

元字符/元符号 匹配情况

 

(string) 用于反为引用的分组

\1 或$1 匹配第一个分组中之内容

\2 或$2 匹配第二只分组中之情

\3 或$3 匹配第三个分组中之内容

 

/*下点头字符*/

var pattern = /g..gle/; //.匹配一个随机字符

var str = ‘google’;

alert(pattern.test(str));

 

/*重匹配*/

var pattern = /g.*gle/; //.匹配0 个一个要多单

var str = ‘google’; //*,?,+,{n,m}

alert(pattern.test(str));

 

/*利用字符类匹配*/

var pattern = /g[a-zA-Z_]*gle/; //[a-z]*意味着任意个a-z 中的字符

var str = ‘google’;

alert(pattern.test(str));

var pattern = /g[^0-9]*gle/; //[^0-9]*表示任意个非0-9 的字符

var str = ‘google’;

alert(pattern.test(str));

var pattern = /[a-z][A-Z]+/; //[A-Z]+表示A-Z 一不好或数

var str = ‘gOOGLE’;

alert(pattern.test(str));

 

/*运元符号匹配*/

var pattern = /g\w*gle/; //\w*匹配任意多独有字母数字_

var str = ‘google’;

alert(pattern.test(str));

var pattern = /google\d*/; //\d*相当任意多个数字

var str = ‘google444’;

alert(pattern.test(str));

var pattern = /\D{7,}/; //\D{7,}匹配至少7 单非数字

var str = ‘google8’;

alert(pattern.test(str));

 

/*动锚元字符匹配*/

var pattern = /^google$/; //^从初步匹配,$从最后开始匹配

var str = ‘google’;

alert(pattern.test(str));

var pattern = /goo\sgle/; //\s 可以配合到空格

var str = ‘goo gle’;

alert(pattern.test(str));

var pattern = /google\b/; //\b 可以匹配是否到了界线

var str = ‘google’;

alert(pattern.test(str));

 

/*采用要模式匹配*/

var pattern = /google|baidu|bing/; //匹配三栽中同样种植字符串

var str = ‘google’;

alert(pattern.test(str));

 

/*行使分组模式匹配*/

var pattern = /(google){4,8}/; //匹配分组里的字符串4-8 次

var str = ‘googlegoogle’;

alert(pattern.test(str));

var pattern = /8(.*)8/; //获取8..8 之间的轻易字符

var str = ‘This is 8google8’;

str.match(pattern);

alert(RegExp.$1); //得到第一个分组里的字符串内容

var pattern = /8(.*)8/;

var str = ‘This is 8google8’;

var result = str.replace(pattern,'<strong>$1</strong>’);
//得到调换的字符串输出

document.write(result);

var pattern = /(.*)\s(.*)/;

var str = ‘google baidu’;

var result = str.replace(pattern, ‘$2 $1’); //将两只分组的价值替换输出

document.write(result);

 

贪婪惰性

+ +?

? ??

* *?

{n} {n}?

{n,} {n,}?

{n,m} {n,m}?

 

/*有关贪婪和惰性*/

var pattern = /[a-z]+?/; //?号关闭了贪匹配,只替换了第一只

var str = ‘abcdefjhijklmnopqrstuvwxyz’;

var result = str.replace(pattern, ‘xxx’);

alert(result);

var pattern = /8(.+?)8/g; //禁止了贪,开启之大局

var str = ‘This is 8google8, That is 8google8, There is 8google8’;

var result = str.replace(pattern,'<strong>$1</strong>’);

document.write(result);

var pattern = /8([^8]*)8/g; //另一种禁止贪婪

var str = ‘This is 8google8, That is 8google8, There is 8google8’;

var result = str.replace(pattern,'<strong>$1</strong>’);

document.write(result);

 

/*使用exec 返回数组*/

var pattern = /^[a-z]+\s[0-9]{4}$/i;

var str = ‘google 2012’;

alert(pattern.exec(str)); //返回整个字符串

var pattern = /^[a-z]+/i; //只匹配字母

var str = ‘google 2012’;

alert(pattern.exec(str)); //返回google

var pattern = /^([a-z]+)\s([0-9]{4})$/i; //使用分组

var str = ‘google 2012’;

alert(pattern.exec(str)[0]); //google 2012

alert(pattern.exec(str)[1]); //google

alert(pattern.exec(str)[2]); //2012

 

/*捕获性分组和无捕获性分组*/

var pattern = /(\d+)([a-z])/; //捕获性分组

var str = ‘123abc’;

alert(pattern.exec(str));

var pattern = /(\d+)(?:[a-z])/; //非捕获性分组

var str = ‘123abc’;

alert(pattern.exec(str));

 

/*利用分组嵌套*/

var pattern = /(A?(B?(C?)))/; //从外往内得到

var str = ‘ABC’;

alert(pattern.exec(str));

 

/*行使前瞻捕获*/

var pattern = /(goo(?=gle))/; //goo 后面要就gle 才能够捕获

var str = ‘google’;

alert(pattern.exec(str));

 

/*用特殊字符匹配*/

var pattern = /\.\[\/b\]/; //特殊字符,用\号转义即可

var str = ‘.[/b]’;

alert(pattern.test(str));

 

/*使换行模式*/

var pattern = /^\d+/mg; //启用了换行模式

var str = ‘1.baidu\n2.google\n3.bing’;

var result = str.replace(pattern, ‘#’);

alert(result);

 

四.常用底正则

 

1.反省邮政编码

 

var pattern = /[1-9][0-9]{5}/; //共6 各数字,第一个非可知也0

var str = ‘224000’;

alert(pattern.test(str));

 

2.检查文件压缩包

 

var pattern = /[\w]+\.zip|rar|gz/; //\w 代表拥有数字与字母加下划线

var str = ‘123.zip’; //\.表示相当配.,后面是一个抉择

alert(pattern.test(str));

 

3.刨除多余空格

 

var pattern = /\s/g; //g 必须全局,才会全部配合

var str = ‘111 222 333’;

var result = str.replace(pattern,”); //把空格匹配成无空格

alert(result);

 

4.抹首尾空格

 

var pattern = /^\s+/; //强制首

var str = ‘ goo gle ‘;

var result = str.replace(pattern, ”);

pattern = /\s+$/; //强___________制尾

result = result.replace(pattern, ”);

alert(‘|’ + result + ‘|’);

var pattern = /^\s*(.+?)\s*$/; //使用了非贪婪捕获

var str = ‘ google ‘;

alert(‘|’ + pattern.exec(str)[1] + ‘|’);

var pattern = /^\s*(.+?)\s*$/;

var str = ‘ google ‘;

alert(‘|’ + str.replace(pattern, ‘$1’) + ‘|’); //使用了分组获取

 

 

5.简单的电子邮件验证

 

var pattern =
/^([a-zA-Z0-9_\.\-]+)@([a-zA-Z0-9_\.\-]+)\.([a-zA-Z]{2,4})$/;

var str = ‘yc60.com@gmail.com’;

alert(pattern.test(str));

var pattern = /^([\w\.\-]+)@([\w\.\-]+)\.([\w]{2,4})$/;

var str = ‘yc60.com@gmail.com’;

alert(pattern.test(str));

 

PS:以上是粗略电子邮件验证,复杂的要于之纷繁很多,大家好搜一下。