正则表达式(上)

内容提纲:

1.什么是正则表达式

2.创建正则表达式

 转载请注明出处,谢谢!

假设用户需要在HTML表单中填写姓名、地址、出生日期等。那么在将表单提交到服务器进一步处理前,JavaScript程序会检查表单以确认用户确实输入了信息并且这些信息是符合要求的。这时候就需要用到正则表达式。

一.什么是正则表达式

正则表达式(regular expression)是一个描述字符模式的对象。ECMAScript的RegExp类表示正则表达式,而String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数。

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

 

二.创建正则表达式

创建正则表达式和创建字符串类似,创建正则表达式提供了两种方法,一种是采用new运算符,另一个是采用字面量方式。

1.采用new运算符方式

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

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

模式修饰符的可选参数


参  数


含  义


i


忽略大小写


g


全局匹配


m


多行匹配

2.采用字面量方式

var box = /box/;                                               //直接用两个反斜杠

var box = /box/ig;                                            //在第二个斜杠后面加上模式修饰符

3.测试正则表达式

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方法还有其他具体应用,我们在获取控制学完后再看(见下篇)。

4.使用字符串的正则表达式方法

除了test()和exec()方法,String对象也提供了4个使用正则表达式的方法(使用方式与est()和exec()方法作对比)

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,是否全局了,g

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

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

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,第二次匹配的起始位置(要有g)

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

 更多深入内容,见正则表达式(下)。

For my lover, CC!

Thank you, Mr Lee!

时间: 2024-10-26 05:55:03

正则表达式(上)的相关文章

python之(re)正则表达式上

python正则表达式知识预备 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \\\\ "表示正则表达式中的" \ ",因为正则表达式中如果要匹配" \ ",需要用\来转义,变成" \\ ",而Python语法中又需要对字符串中每一个\进行转义,所以就变成了" \\\\ ". 上面的写法是不是觉得很麻烦,为了使正则表达式

计算机程序的思维逻辑 (88) - 正则表达式 (上)

?上节我们提到了正则表达式,它提升了文本处理的表达能力,本节就来讨论正则表达式,它是什么?有什么用?各种特殊字符都是什么含义?如何用Java借助正则表达式处理文本?都有哪些常用正则表达式?由于内容较多,我们分为三节进行探讨,本节先简要探讨正则表达式的语法. 正则表达式是一串字符,它描述了一个文本模式,利用它可以方便的处理文本,包括文本的查找.替换.验证.切分等. 正则表达式中的字符有两类,一类是普通字符,就是匹配字符本身,另一类是元字符,这些字符有特殊含义,这些元字符及其特殊含义就构成了正则表达

JavaScript 正则表达式上——基本语法

定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%>','g'); 2. 字面量 var reg=/<%[^%>]%>/g; g: global,全文搜索,默认搜索到第一个结果接停止 i: ingore case,忽略大小写,默认大小写敏感 m: multiple lines,多行搜索 元字符 正则表达式让人望而却步以一个重要原因就是其转

javascript正则表达式 &quot;\b&quot;问题

preface 昨晚在看<javascript权威指南>后,看见作者自己封装一个兼容所有浏览器的山寨HTML5新API classLIst类.自己想了想觉得自己也要去玩一下,但是能力还是有限,所以就遇见一个正则表达式的bug,确实自己对正则表达式有兴趣但是掌握不是很好.困扰了一段时间,早上在stack overflow网站中找到了答案. issue description 首先我创建一个类叫CSSClassList   CSSClassList = function(el){    this.

shell script 在if 的判断条件正则表达式=~中引号问题

今天在脚本里运行if判断的时候,总是进不了对应的分支,检查正则表达式也没有错误.单独拿到shell里面执行还是显示没有匹配.比较奇怪,就搜了下,才发现是在=~ 后面的正则表达式上不能加上引号,而且以点代表任意字符,最后面是不能加上(.)*来匹配接完的. 下面是搜到的部分信息: 一个匹配ip地址的测试,结果匹配不了: newip='192.168.1.1' if [[ "$newip" =~ '^([0-9]{1,3}\.){3}[0-9]{1,3}$' ]];then echo '找到

JavaScript正则表达式在不同浏览器中可能遇到的问题

这两天在用正则表达式搞一个稍微有点复杂的东西,但是不同浏览器之间的差异可浪费了我不少的人参. 现在我把正则表达式在五大主流浏览器(IE.firefox.Chrome.Safari.Opera,以当前版本为准)之间的差异整理一下罗列出来,给大家,也算给我自己做一个备忘. Firefox和Chrome会过度优化在循环中创建的正则表达式,似乎它们在假设写JavaScript的人会把正则表达式的构建和赋值写错地方. 1 var r; 2 for(var i = 0; i < 2; i++){ 3 var

[Python 3系列]正则表达式

正则表达式,简称为regex,是文本模式的描述方法.例如,\d是一个正则表达式,表示一位数字字符,即任何一位0到9的数字. 使用步骤 python中所有正则表达式的函数都在re模块中. ▎python中使用正则表达式的步骤如下: ①用import re导入正则表达式模块: ②用re.compile()函数创建一个Regex对象. ③向Regex对象的search()方法传入想查找的字符串.它返回一个Match对象. ④调用Match对象的group()方法,返回实际匹配文本的字符串. 字符分类

课堂笔记 0523 正则表达式

正则表达式 负责字符串匹配处理规则,应用广泛 切记 只要能读懂正则表示就可以 能够写出简单的正则表达式内容 不要花很多时间在正则表达式上 p[abcdef] 表示 a,b,c,d,e,f之一 [0-9a-zA-Z]{4}=\w{4}:4个字符 \w:单词字符 \d:数字字符 .:任意字符 {2,4}:至少出现两次,最多出现四个 \d?:出现0 或1次 ^\d(,|\s)\d$ :\^和\$固定住格式,只能是数字,数字,或者数字 数字 ()优先看待 | 代表或的意思 ^\d(,|\s)\s*\d$

【Linxu学习008】grep和正则表达式

一.使用grep命令打印匹配的行 grep命令是一个文本搜索命令,能够从指定的"源"搜索匹配串所在的行并将其打印到控制台. grep命令本身并没有什么特别需要注意的使用事项,但是由于其依赖于正则表达式,所以是一个非常复杂的命令,其重点也都在正则表达式上了. grep常用选项: grep          --color    :将匹配到的所有字符都高亮显示         -i        :忽略大小写         -v        :显示所有没有匹配到的行         -

JavaScript正则表达式的浏览器的差异

JavaScript中的正则表达式在不同的浏览器中得到的结果可能会有差异,下面把正则表达式在五大主流浏览器(IE.Firefox.Chrome.Safari.Opera,以当前版本为准)之间的差异整理一下罗列出来.兰西县璩家摄影 1. Firefox和Chrome会过度优化在循环(以及其中内嵌的函数定义)中创建的正则表达式,似乎它们在假设写JavaScript的人会把正则表达式的构建和赋值写错地方. var r; for(var i = 0; i < 2; i++){ var x = /abc/