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,一经查实,立即删除!

相关文章

第二章 列表和元组

第二章 列表和元组 在Python中&#xff0c;最基本的数据结构为序列&#xff08;包括列表、元组、字符串等&#xff09;&#xff08;sequence&#xff09; 列表是可以修改的&#xff0c;而元组不可以 Python支持一种数据结构的基本概念&#xff0c;名为容器&#xff08;contain…

linux下mac风格菜单栏,ubuntu 8.04 安装mac风格菜单

ubuntu 8.04 安装mac风格菜单发布时间:2008-07-13 00:22:22来源:红联作者:bindex这只是一份草案文档&#xff0c;它可能会导致一些计算机故障。引言这份指南假定你没有在电脑上编译过其他程序&#xff0c;并且&#xff0c;假定你使用的是Ubuntu Gusty。1.使用deb包安装 32位系统…

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

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

带有示例的Python File readlines()方法

文件readlines()方法 (File readlines() Method) readlines() method is an inbuilt method in Python, it is used to get all lines from the file, the method is called with this object (current file stream/IO object) and returns all available lines in the file, w…

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

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

case使用 上下篇

上篇 Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数 CASE sexWHEN 1 THEN 男WHEN 2 THEN 女 ELSE 其他 END --Case搜索函数 CASE WHEN sex 1 THEN 男WHEN sex 2 THEN 女 ELSE 其他 END这两种方式&#xff0c;可以实现相同的功能。简单Case函数的写法相对比…

第三章 字符串

第三章 字符串% 字符串是不可变的&#xff0c;所有的元素赋值和切片赋值都是非法的 Python提供了多种字符串格式设置方法 yanyu "hello, %s I like %s age is %s" beyond ("beyond","band",23) yanyu % beyond#结果为&#xff1a;hello, bey…

【视觉项目】【day5】8.25号实验记录(修完BUG,28张测试图,13个样本,四张测试图误判,这比之前效果好很多了)

目录修改完BUG后的程序以及效果优化思路&#xff0c;增强正确识别率&#xff08;待验证&#xff09;修改完BUG后的程序以及效果 修改代码后的测试结果&#xff1a;(利用连通域面积将明显比本张测试图的瓶子要小的模板提前去除&#xff0c;减少误判) 这样下来&#xff0c;28张测…

linux kernel and user space通信机制,Linux内核空间与用户空间通信机制地研究.doc

实用文案标准文档Linux内核空间与用户空间通信机制的研究Linux kernel space and user space communication mechanism摘 要Linux 是一个源码开放的操作系统&#xff0c;无论是普通用户还是企业用户都可以编写自己的内核代码&#xff0c;再加上对标准内核的裁剪从而制作出适合自…

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

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

python 示例_带有示例的Python date timetuple()方法

python 示例Python date.timetuple()方法 (Python date.timetuple() Method) date.timetuple() method is used to manipulate objects of date class of module datetime. date.timetuple()方法用于操作模块datetime的日期类的对象。 It is an instance method which means …

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;…

第四章 字典

第四章 字典{键:值,名字:电话号码} 映射&#xff1a;通过名称来访问其各个值的数据结构 列表&#xff1a;将一系列值组合成数据结构并通过编号来访问各个值 字典是Python中唯一的内置映射类型&#xff0c;其中的值不按顺序排列&#xff0c;而是存储在键下 键可能是数、字符串…

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

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

linux x64 asm 参数传递,NASM汇编学习系列(1)——系统调用和参数传递

0. 说明本学习系列代码几乎完全摘自&#xff1a;asmtutor.com&#xff0c;如果英文可以的(也可以用谷歌浏览器翻译看)&#xff0c;可以直接看asmtutor.com上的教程系统环境搭建&#xff1a;(我用的是ubuntu18.04.4 server&#xff0c;安装gcc、g)sudo apt install nasmsudo apt…

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

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

treeset java_Java TreeSet pollLast()方法与示例

treeset javaTreeSet类pollLast()方法 (TreeSet Class pollLast() method) pollLast() method is available in java.util package. pollLast()方法在java.util包中可用。 pollLast() method is used to return the last highest element and then remove the element from thi…

第五章 条件、循环及其他语句

第五章 条件、循环及其他语句 再谈print和import print现在实际上是一个函数 1&#xff0c;打印多个参数 用逗号分隔&#xff0c;打印多个表达式 sep自定义分隔符&#xff0c;默认空格 end自定义结束字符串&#xff0c;默认换行 print("beyond",yanyu,23)#结果为…

两种方法将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; 模板匹配的几…