js 第四课

正则表达式:RegExp对象

    正则表达式描述一个字符模式的对象,或者说用某种模式去匹配一类字符串的一个公式。

1.创建

    可以用RegExp构造函数直接量两种方式。正则表达式直接量被包含在一对"/"中.

1         var partern1 = RegExp('\\d*');
2         //等价于
3         var partern1 = /\d*/;
4         var partern2 = RegExp('^[1-9]*$');
5         //等价于
6         var partern2 = /^[1-9]*$/;
RegExp

 在创建正则表达式时可以为其制定一个标志,来说明高级匹配模式的规则。

    当使用RegExp创建表达式对象时,需要指定的标志作为第二个参数传入.

    当使用直接量创建表达式对象时,直接在标识表达式的结束位置"/"写上标志.

标志含义
i执行匹配时忽略大小写
g执行一个全局匹配,即找到所有匹配项,
m多行匹配模式

 标志可以自由搭配使用.......... 

        var partern1 = RegExp('\\d*','g');//等价于var partern1 = /\d*/g;var partern2 = RegExp('^\\S$','i');//等价于var partern2 = /^\S$/i;var partern3 = RegExp('^\\w$', 'ig');//等价于var partern3 = /^\w$/ig;


2.语法规则:

  1.正则表达式由字符直接量,元符号和各种转义序列组成。

    字符直接量:匹配它本身。

    除了字母字符和数字外,可以通过"\"开头的转义序列支持非字母字符。

  直接量字符   匹配
  字母或数字字符   自身
  \o  NUL字符
   \t  水平制表符 
   \v   垂直制表符
   \n   换行符
   \r   回车符
   \f   换页符
   \xnn   由十六进制nn指定的拉丁字符
   \uxxxx   由十六进制xxxx指定的Unicode字符
   \cx   控制字符x

     在“[]”内放入单独的直接量组成字符类,一个字符类可以和它所包含的任何单个字符相匹配eg:[abc] 匹配:“a”,“b”,“c”

  字符类  匹配  
  [...]  括号内包含的任意字符
  [^...]  括号内不包含的任意字符
  .  除换行符和其他Unicode行中字符之外的其它字符
  \w  大小写字母,数字,下划线
  \W  非大小写字母,数字,下划线
  \s  空白字符
  \S  非空白字符
  \d  数字字符
  \D  非数字字符

     eg:/\d\d/ : 两位数字。  /[bB]ug/ : bug,Bug.  /a.b/ : abb, anb~ 等 。 /[^0-9]/ : 任何单个非数字。

 

    上面给的是单位字符,下面给出多位字符

  符号  含义
  {m,n}  匹配前一项最少m次,最多n次
  {m,}  匹配前一项最少m次
  {m}  匹配前一项m次
    匹配前一项0次或者1次
  +  匹配前一项最少1次 =>{1,}
  *  匹配前一项0次或多次,=>{0,}

     eg: /\d{1,3}/ : 匹配1~3位数字。 /a{3}/ : 匹配aaa.  /a?/ : 匹配‘’和‘a'

  注意:在重复匹配时正则会尽可能多的匹配更多的字符:贪婪匹配。如果在表达式后面加上元符号“?”就会进行费贪婪匹配,匹配尽可能少的字符

  eg: /a+/匹配’aaaab' 时会匹配前四位a ,   /a+?/则只会匹配第一位a

 

    正则表达式还可以指定选择项,为表达式分组引用前面子表达式所匹配的字符

  符号  含义
  |  选择,匹配符号左边的子表达式或者右边的子表达式。
  (...)  组合,将几个项目组合为一个单元,这个单元可以被重复字符所使用,还可以被引用
  (?:...)  只组合,为一个单元,但不能被引用
  \n

  n是一个数字,表示:表达式中第n个可以被引用组合,从左到右按书写顺序排序。

  \n 匹配与其所引用的分组匹配字符一样的字符

  eg:/a|b/ : 'a','b'  . /(a|b)B\1/ :aBa,bBb .   /(?:m+)(a|b)B\1/ : \1匹配a|b而不是m+

 

     正则表达式还有一些字符转义序列匹配的是字符串中的特定位置   : 锚字符

  字符  含义
  ^  匹配字符串的开头。在多行匹配模式中,匹配一行的开头。
  $  匹配字符串的结尾。在多行匹配模式中,匹配一行的结尾
  \b

参考:http://www.w3school.com.cn/js/jsref_regexp_begin.asp

匹配一个词语(单词)的边界

\b 元字符匹配单词边界。

在单词边界匹配的位置,单词字符后面前面不与另一个单词字符直接相邻。请注意,匹配的单词边界并不包含在匹配中。换句话说,匹配的单词边界的长度为零。(不要与 [\b] 混淆。)

如果未找到匹配,则返回 null

提示:\b 元字符通常用于查找位于单词的开头或结尾的匹配。

  \B  匹配所有非词语(单词)边界的字符
    (?:p)  正前向匹配,要求接下来的字符与模式p匹配,但匹配的结果不包含p匹配的字符。
  (?!p)  反前向匹配,要求接下来的字符不与模式p匹配

    eg: /^Bugs/ : 匹配Bugs Bug,不匹配Bug Bug . /s$/ : 匹配 Bug Bugs 不匹配Bugs Bug .

     /^Bugs Bug$/ : 匹配Bugs Bug,不匹配Bug Bug . 

/\bm/ 匹配 "moon" 中的 'm';

/oo\b/ 不匹配 "moon" 中的 'oo',因为 'oo' 后面的 'n' 是一个单词字符;

/oon\b/ 匹配 "moon" 中的 'oon',因为 'oon' 位于字符串的末端,后面没有单词字符;

/\w\b\w/ 不匹配任何字符,因为单词字符之后绝不会同时紧跟着非单词字符和单词字符。

    <script type="text/javascript">var str = "Bugs Bug";var patt1 = /\bBug/g;document.write(str.match(patt1));//Bug,Bug
</script>

      /Bugs(?: Bug)/ : 匹配Bugs Bug 不匹配BugsBug 

注意:如果想匹配元符号或者具有特殊含义的符号时,只需要在相应的字符前面加上转义符反斜线“\”即可。

 

3. 正则表达式的属性

  source :是一个只读的字符串,存放正则表达式的文本。

    <script type="text/javascript">var str = "Bugs Bug";var reg = new RegExp('^(Bugs Bug){0,}$', 'igm');var test = reg.source;alert(test); //^(Bugs Bug){0,}$ </script>

  global : 是一个只读的布尔属性,表示:正则表达式是否启用了全局匹配模式。

    <script type="text/javascript">var str = "Bugs Bug";var reg = new RegExp('^(Bugs Bug){0,}$', 'igm');var reg1 = new RegExp('^(Bugs Bug){0,}$', 'm');alert(reg1.global);//falsealert(reg.global);//true</script>

  ignoreCase : 同global类似,只读的布尔值,表示正则表达式是否启用了忽略大小写的模式。

   multiline :  只读属性,表示正则表达式是否启用了多行匹配的模式。

   lastIndex : 是一个可读可写的整数,记录了在全局匹配模式下,在字符串中下一次开始匹配的位置,

 

 4.用于匹配模式的String方法

  replace方法 :

        var str = "Bugs&Bug";
var reg3 = new RegExp('&', 'g');alert(str.replace(reg3,' '));//Bugs Bug

  search方法 : 以正则表达式为参数,返回第一个与之匹配的子字符的开始位置,如果没有任何子字符与之匹配返回-1.

    <script type="text/javascript">var str = "I Love Bugs Bug";var reg = new RegExp('B.*s', 'igm');//匹配Bugsalert(str.search(reg)); //7alert(str.search(/.(?:Bug)/));//6 //匹配Bugs前面的空格</script>

注意:如果参数不是正则表达式,则参数会被传递给RegExp的构造函数,变为正则表达式,同时,search并不支持全局匹配模式,总是返回找到的第一个子字符的位置.

 在replace方法的第二个参数中,可以使用符号“$”加数字来引用这些分组所匹配的内容。

    <script type="text/javascript">var str = 'my name is?Bugs Bug';var regstr =str.replace(/^.*\?([a-zA-Z]+.*)+$/i, 'my name is:"$1"');alert(regstr); //my name is:"Bugs Bug"</script>

  方法match接受一个正则表达式作为参数(如果不是正则表达式,会转换成正则表达式) 返回一个包含匹配结果的数组,数组的第一个元素是匹配的子字符串

从第二个元素开始,是正则表达式的分组所匹配的内容,如果正则表达式被设置成了全局匹配模式,则返回的数组就是字符串中所有匹配的子字符串,

    <script type="text/javascript">function test() {var str = "my name is?Bugs Bug";var strreg = str.match(/^.*\?(([a-rA-Rt-zT-Z]*).*([a-zA-z]*))$/);alert(strreg); //my name is?Bugs Bug,Bugs Bug,Bug,var strreg2 = str.match(/^.*\?([a-rA-Rt-zT-Z]*).*([a-zA-z])*$/g);alert(strreg2); //my name is?Bugs Bug            
        }test();</script>

如果match作用于一个非全局模式的正则表达式,则返回的数组会有两个额外的

属性 :index:包含所匹配的字符串在源字符串中的位置,

    input:保存了源字符串的一个副本。

            alert(strreg.index);//0alert(strreg.input); //my name is?Bugs Bug 
        }test();

split方法,有一个接受正则表达式的参数

    <script type="text/javascript">function test() {var str = "my|name\\is?Bugs Bug";alert(str.split(/\||\\|\?| /));//my,name,is,Bugs,Bug}test();</script>

 

 RegExp定义了两个用于模式匹配的方法,他们的行为和前面介绍的String方法,类似。第一个是exec方法,和match方法相似,只是它接受一个字符串的参数,在此字符串中进行匹配查找,返回一个数组,与match方法不同的是:无论正则表达式是否开启了全局匹配模式,exec方法每次只匹配一个结果,返回数组的第一个元素是匹配的子字符串,从第二个元素开始是正则表达式中各个分组所匹配的内容,

只是当正则表达式开启了全局匹配模式时,每次成功匹配后,正则表达式的lastIndex属性都会被改写以标识此次匹配的子字符串的位置,在下一次执行exec方法进行匹配时,会从lastIndex属性标识的位置开始查找,当没有任何匹配时,lastindex属性会被重置为0,并返回null,这个特性使程序员反复匹配一个字符串从而得到所有匹配的子字符串的所有信息。

    <script type="text/javascript">function test() {var str = "my|name\\is?Bugs Bug";var reg = /(Bugs) (Bug)/g;var a;while ((a = reg.exec(str)) != null) {document.write(a.join(' ') + '<br/>'); //Bugs Bug Bugs Bug
            }var str = "a=1&b=2+c=3|d=4@e=5%f=6";var reg = /([a-z])=([0-9])/g;var a;while ((a = reg.exec(str)) != null) {document.write(a.join(' ') + '<br/>');/*           a=1 a 1b=2 b 2c=3 c 3d=4 d 4e=5 e 5f=6 f 6*/}}test();</script>


另一个方法是test,接受一个字符串作为参数,然后进行匹配检测,如果字符串能够进行匹配,则返回true,否则false,

    <script type="text/javascript">function test() {            var reg = /([A-Za-z])/;alert(reg.test("Bugs Bug"));//truealert(reg.test("123"));//false
        }test();</script>

常用的正则表达式:(未验证)

中文字符[\u4e00-\u9fa5]
双字节字符(包括汉字)[^\x00-\xff]
E-mail地址/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/i
HTML标记/<(.*)>.*<\/\1>|<(.*)\/>/
URL 地址/^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$/i
字符串首尾的空格/(^\s*)|(\s*$)/
颜色代码/\#[a-fA-F0-9]{6}/
身份证号码/^\d{15}(\d{2}[xX0-9])?$/
电话号码/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/
整数/^(\+|\-)?[1-9]\d*$/
浮点数/^(\+|\-)?(0|[1-9][0-9]*)(\.[0-9]*[1-9])?$/

转载于:https://www.cnblogs.com/wjshan0808/archive/2013/05/19/3086567.html

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

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

相关文章

解析法实现一元线性回归、多元线性回归以及数据模型可视化操作

目录【1】解析法实现一元线性回归python列表实现利用Numpy实现利用TensorFlow实现数据和模型可视化【2】解析法实现多元线性回归利用Numpy实现需要用到的NumPy数组运算函数数据和模型可视化绘制空间点集&#xff1a;绘制空间平面图&#xff1a;绘制线框图并且与散点图对比&…

32位系统win2008+mssql2008 6G内存折腾纪实

十年没搞硬件了&#xff0c;现在计算机发展到大硬盘大内存的时代了。一直都少搞服务器配置、运营&#xff0c;以前弄服务器都是普通的PC来当服务器。公司原来的一个业务系统用的是mssql2000好几年了&#xff0c;由于业务数据越积压越多最大的一张表已经有7000多万条记录了&…

前台用js、jquery出现错误很多是由于IE缓存

例如&#xff1a;当你用jquery进行异步请求数据时&#xff0c;如果浏览器发现请求的地址不变&#xff0c;或者参数也不改变的情况下 IE默认是取原来的缓存中的数据&#xff0c;而不进行重新请求数 解决的方法是是在地址栏的后面加上一个随机参数值&#xff0c;IE发现地址改变&a…

WebC.BBS 项目参与新人必读

开发环境: 采用Visual Studio 2010&#xff0c;MVC版本采用Asp.Net MVC3&#xff0c;数据库采用Sql2005 2008,扩展技术包括jQuery。 SVN的相关信息&#xff1a; SVN-Url&#xff1a;svn://svn.cyqdata.com/project_bbs 账户申请&#xff1a;请将自己的密码发给组长&#xff0c;…

利用梯度下降法求解一元线性回归和多元线性回归

文章目录原理以及公式【1】一元线性回归问题【2】多元线性回归问题【3】学习率【4】流程分析&#xff08;一元线性回归&#xff09;【5】流程分析&#xff08;多元线性回归&#xff09;归一化原理以及每种归一化适用的场合一元线性回归代码以及可视化结果多元线性回归代码以及可…

Javascript之创建对象(原型模式)

我们创建的每个函数都有一个prototype(原型)属性&#xff0c;这个属性是一个指针&#xff0c;指向一个对象&#xff0c;它的用途是包含可以有特定类型的所有实例共享的属性和方法。 prototype就是通过构造函数而创建的那个对象的原型对象。使用原型的好处就是可以让所有对象实例…

两种方法将Android NDK samples中hello-neon改成C++

一、第一种方法&#xff1a;1.修改helloneon.c 中代码 a.将 char* str; 改为 char str[512] {0}; b.将 asprintf(&str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); 改为 sprintf(str, "FIR Filter benchmark:\nC ve…

【视觉项目】【day6】8.26关于matchTemplate()以及NCC的思考整理

NCC与matchTemplate()函数中match_method TM_CCOEFF_NORMED是否一样&#xff1f; 先看公式&#xff1a; TM_CCOEFF_NORMED NCCTM_CCOEFF_NORMED:归一化的相关性系数匹配方法 NCC:normalized cross correlation:归一化互相关系数 公式是一样的。 参考&#xff1a; 模板匹配的几…

HTTP 状态代码

如果向您的服务器发出了某项请求要求显示您网站上的某个网页&#xff08;例如&#xff0c;当用户通过浏览器访问您的网页或在 Googlebot 抓取该网页时&#xff09;&#xff0c;那么&#xff0c;您的服务器会返回 HTTP 状态代码以响应该请求。 此状态代码提供了有关请求状态的信…

TensorFlow的可训练变量和自动求导机制

文章目录一些概念、函数、用法TensorFlow实现一元线性回归TensorFlow实现多元线性回归一些概念、函数、用法 对象Variable 创建对象Variable&#xff1a; tf.Variable(initial_value,dtype)利用这个方法&#xff0c;默认整数为int32&#xff0c;浮点数为float32&#xff0c;…

django第二个项目--使用模板做一个站点访问计数器

上一节讲述了django和第一个项目HelloWorld&#xff0c;这节我们讲述如何使用模板&#xff0c;并做一个简单的站点访问计数器。 1、建立模板 在myblog模块文件夹&#xff08;即包含__init__.py的文件夹)下面新建一个文件夹templates&#xff0c;用于存放HTML模板&#xff0c;在…

c语言math乘法,JavaScript用Math.imul()方法进行整数相乘

1. 基本概念Math.imul()方法用于计算两个32位整数的乘积&#xff0c;它的结果也是32位的整数。JavaScript的Number类型同时包含了整数和浮点数&#xff0c;它没有专门的整型和浮点型。因此&#xff0c;Math.imul()方法能提供类似C语言的整数相乘的功能。我们将Math.imul()方法的…

梯度下降法预测波士顿房价以及简单的模型评估

目录原理代码关于归一化的思考原理 观察数据可知属性之间差距很大&#xff0c;为了平衡所有的属性对模型参数的影响&#xff0c;首先进行归一化处理。 每一行是一个记录&#xff0c;每一列是个属性&#xff0c;所以对每一列进行归一化。 二维数组归一化&#xff1a;1、循环方式…

Windows Phone 内容滑动切换实现

在新闻类的APP中&#xff0c;有一个经常使用的场景&#xff1a;左右滑动屏幕来切换上一条或下一条新闻。 那么通常我们该使用哪种方式去实现呢&#xff1f;可以参考一下Demo的实现步骤。 1&#xff0c;添加Windows Phone用户自定义控件。例如&#xff1a; 这里我为了演示的方便…

使用鸢尾花数据集实现一元逻辑回归、多分类问题

目录鸢尾花数据集逻辑回归原理【1】从线性回归到广义线性回归【2】逻辑回归【3】损失函数【4】总结TensorFlow实现一元逻辑回归多分类问题原理独热编码多分类的模型参数损失函数CCETensorFlow实现多分类问题独热编码计算准确率计算交叉熵损失函数使用花瓣长度、花瓣宽度将三种鸢…

【神经网络计算】——神经网络实现鸢尾花分类

本blog为观看MOOC视频与网易云课堂所做的笔记 课堂链接&#xff1a; 人工智能实践:TensorFlow笔记 吴恩达机器学习 疑问与思考 为什么按照batch喂入数据 之前看的视频里面处理数据都是一次性将所有数据喂入&#xff0c;现在看的这个视频对数据进行了分组投入。这是为何&#…

c# xaml语言教程,c#学习之30分钟学会XAML

1.狂妄的WPF相对传统的Windows图形编程&#xff0c;需要做很多复杂的工作&#xff0c;引用许多不同的API。例如&#xff1a;WinForm(带控件表单)、GDI(2D图形)、DirectXAPI(3D图形)以及流媒体和流文档等&#xff0c;都需要不同的API来构建应用程序。WPF就是看着上面的操作复杂和…

.NET 小结之内存模型

.NET 小结之内存模型 为什么要解.NET 的内存模型 在.NET下的内存管理、垃圾回收其实大部分不需要我们操心&#xff0c;因为大部分.NET已经帮我们做了&#xff0c;通常情况下也不需要考虑这些。但是如果想要了解一些.NET一些稍微“底层”的原理&#xff0c;如&#xff1a;“装箱…

【电设控制与图像训练题】【激光打靶】【openmv测试代码以及效果】

9.4加入串口通讯,送出靶心坐标、激光坐标、激光所在环数、方位;加入防误判操作 博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 目录 规则坐标系代码总结相关openmv使用文…

MVC3中的视图文件

在MVC3中的视图部分&#xff0c;Razor视图引擎是与以往不同的地方之一&#xff0c;使用Razor的视图文件再也不是以往的ASPX文件了&#xff0c;是cshtml文件&#xff0c;在新建视图的时候也会发现增加多了几类文件 由上到下分别是 MVC 3 Layout Page&#xff1a;与原来Web Form的…