正则表达式(上)

内容提纲:

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还支持手动设置,直接赋值操作。

 更多深入内容,见正则表达式(下)http://www.cnblogs.com/ttcc/p/3959604.html。

For my lover, CC!

Thank you, Mr Lee!

转载于:https://www.cnblogs.com/ttcc/p/3959457.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中关键字、标识符、常量、变量、数据类型

关键字: JAVA语言中已经定义好的具有特殊含义的单词,被称为关键字,关键字是全小写无特殊字符的纯 英文字母,在编辑器中一般有高亮效果,如public、class、static等。 标识符: 在JAVA语言中,自…

js滚动条下拉一定值_JS逆向 | 无限Debugger之淘大象

置顶公众号今天继续和大家研究JS逆向,不少小伙伴在JS逆向的时候遇到过无限debugger的反爬,今天就拿一个网站练练手感受下无限debugger。分析请求先打开这次的目标网站--淘大象(https://taodaxiang.com/credit2)打开「开发者工具」就自动进入debug&#x…

apache配置多个虚拟主机

设置apache 多个虚拟目录记录 #配置第2个虚拟目录<VirtualHost 127.0.0.2:80>ServerName www.xx.comDocumentRoot "E:/wamp/www/"</VirtualHost><Directory "E:/wamp/www/"> Options Indexes FollowSymLinks Multiviews AllowOv…

java中数据类型转换、ASCII编码

数据类型转换&#xff1a; JAVA语言中要求参与计算的数据类型要保持一致&#xff0c;如果不一致则会发生数据类型转换&#xff0c;数据类型转换可分为&#xff1a;自动类型转换&#xff08;隐式转换&#xff09;和强制类型转换&#xff08;显式转换&#xff09;。 自动类型转…

pyecharts x轴字体大小调整_pyecharts 柱状图基础篇#学习笔记#

2020年初&#xff0c;很久没有用过pyecharts的我由于工作原因&#xff0c;安装了新版pyecharts之后&#xff0c;以前的pyecharts代码报错了。搜索之后才发现&#xff0c;我安装的是不兼容旧版本的新版。空闲的时间&#xff0c;把新版echart当作新的模块梳理了一下&#xff0c;整…

BZOJ 1640: [Usaco2007 Nov]Best Cow Line 队列变换

Description FJ打算带着他可爱的N (1 ≤ N ≤ 2,000)头奶牛去参加”年度最佳老农”的比赛.在比赛中,每个农夫把他的奶牛排成一列,然后准备经过评委检验. 比赛中简单地将奶牛的名字缩写为其头字母(the initial letter of every cow),举个例子,FJ带了Bessie, Sylvia,和Dora,那么就…

JAVA语言运算符(算数运算符、赋值运算符、比较运算符、逻辑运算符、三元运算)

运算符 JAVA语言中将运算符分为&#xff1a;算数运算符、赋值运算符、比较运算符、逻辑运算符、三元运算符。 算数运算符&#xff1a;算数运算符是对数字进行一系列的加减乘除等的计算&#xff0c;常见的算数运算符如&#xff1a; public class Operation{public static vo…

真彩色图像数据量 计算_军职在线大学计算机基础(自主模式)

第一章单选题电子计算机的发展已经经过了4代&#xff0c;4代计算机的主要元器件分别是(b)a.电子管&#xff0c;晶体管&#xff0c;中小规模集成电路&#xff0c;激光器件b.电子管&#xff0c;晶体管&#xff0c;中小规模集成电路&#xff0c;大规模或超大规模集成电路 c.晶体管…

hdu 2570 贪心

贪心的经典题型 该死的精度问题&#xff0c;WA了好几次&#xff0c;以后能用乘的绝不用除&#xff01;&#xff01; #include<iostream> #include<algorithm> #include<cstdio>using namespace std;int main(){int n,v,w,k,i;int p[111],t[111];cin>>k…

JAVA语言中流程控制(顺序结构、判断语句、循环语句)

流程控制&#xff1a; 程序在执行的过程中&#xff0c;各条语句的执行顺序对程序的结果是有直接影响的&#xff0c;所以&#xff0c;我们必须清楚每条语句的执行流程。而且&#xff0c;很多时候我们要通过控制语句的执行顺序来实现想要的功能。java中流程控制有&#xff1a;顺…

python下载文件暂停恢复_selenium+Python如何取消Chrome下载文件的‘保留’‘放弃’提示?...

本人在做自动化测试的时候遇到问题&#xff0c;自动导出文件的步骤可以执行&#xff0c;但是文件并没有成功导出到目标目录&#xff0c;经debug发现&#xff0c;Chrome卡在了下载询问的窗口页面&#xff0c;就是底部弹出窗口询问是否‘保留’或者‘放弃’的那个页面。所以脚本执…

2014/9/12 play with thesick siyang baby.

11:48 2014/9/12再怎么无聊的游戏&#xff0c;在思杨宝宝的眼里都是那么好玩&#xff0c;那么有趣。昨天回去和他玩老鹰抓小鸡的游戏&#xff0c;我当老鹰&#xff0c;他当小兔子。我看他跑到奶奶屋里&#xff0c;就冲进去把他“抓走”&#xff0c;然后扔到我的屋里。思杨乐的啊…

java中JShell脚本工具、常量优化、集成开发环境IDEA

JShell脚本工具&#xff1a; jshell:直接在DOS命令行&#xff08;黑窗口&#xff09;键入main方法中的代码就可以快速看到运行的结果&#xff0c;无需编译再运行&#xff0c;并且省略了入口方法及定义类的过程&#xff0c;其使用方法&#xff1a; 1.打开黑窗口后键入&#xf…

ASP.NET MVC3 学习心得------路由机制

9.1 理解URL URL满足的要求&#xff1a; l 域名易于记忆和拼写 l 简短、易输入 l 可以反应出站点的结构 l 可破解&#xff0c;用户可以通过移除URL的末尾&#xff0c;进而达到更高层次的信息体系结构 l 持久、不能变化 9.2路由机制的概述 ASP.NET MVC中路由机制的两种用途&…

python编写arcgis脚本教程_ArcGIS使用Python脚本工具

在Pyhton写的一些代码&#xff0c;用户交互不方便&#xff0c;用户体验比较差&#xff0c;不方便重用。在ArcGIS中可以将用写的Python代码导入到ToolBox中&#xff0c;这样用起来就比较方便了。这里用按要素裁剪栅格的Python来演示如何导入ArcGIS中。代码如下&#xff1a; impo…

初步认识java中的方法

java中方法&#xff1a; 方法&#xff1a;是将一个功能抽取出来&#xff0c;把代码单独定义在一个大括号内&#xff0c;形成一个单独的功能。需要这个功能的时候&#xff0c;就可以去调用。这样即实现了代码的复用&#xff0c;也解决了代码冗余的问题。 public class Methods…

python中可以使用变量来引用函数吗_如何在python语言中使用函数变量并调用函数...

在python语言中&#xff0c;除了常规变量之外&#xff0c;还有函数变量。把函数本身赋值给变量&#xff0c;这个变量为函数变量。工具/原料 python pycharm 截图工具 WPS 方法/步骤 1 在已新建的python文件中&#xff0c;定义函数mul_data&#xff0c;传入两个参数param和exp2 …

ACM竞赛常用STL(二)之STL--algorithm

<algorithm>无疑是STL 中最大的一个头文件&#xff0c;它是由一大堆模板函数组成的。下面列举出<algorithm>中的模板函数&#xff1a; adjacent_find / binary_search / copy / copy_backward / count/ count_if / equal / equal_range / fill / fill_n / find /fi…

C语言程序设计现代方法1,2,3章

1&#xff1a;浮点型&#xff08;float&#xff09;运算比int慢&#xff0c;并且可能存在舍入误差 如float存储0.1&#xff0c;以后使用可能会变成0.099999999987 2&#xff1a;宏定义只用大写&#xff0c;这是大多数C程序猿遵循的规范&#xff01; C语言区分大小写&#xff0c…

python全栈要学什么_python全栈要学什么 python全栈学习路线

IT行业&#xff0c;技术要比学历、年龄、从业经验更为重要&#xff0c;技术水平直接决定就业薪资&#xff0c;想要学好python&#xff0c;首先要先了解精通Python语言基础、Python web开发、Python爬虫、Python数据分析这四大方面。 全栈即指的是全栈工程师&#xff0c;指掌握多…