JavaScript中正则表达式学习笔记

一、正则表达式是什么:

  处理字符串时,经常需要处理复杂规则的字符串。正则表达式就是用于描述这些规则的工具。换句话说,就是记录文本规则的代码。

二、正则表达式能做什么:

  数据有效性验证(测试字符串匹配)如邮箱,电话号码等

  替换文本

  提取子字符串

三、特点:

  灵活性、逻辑性、功能性非常强

  可以迅速的用极简单的方法达到字符串的复杂控制

  刚接触的人比较晦涩难懂

四、规则

  1.普通字符

    作用:匹配与之相同的一个字符。

    字母,数字,汉字,下划线。

  2.非打印字符

    \f:匹配一个换页符。等价于 \x0c 和 \cL。

    \n:匹配一个换行符。等价于 \x0a 和 \cJ。

    \r:匹配一个回车符。等价于 \x0d 和 \cM。

    \t:匹配一个制表符。等价于 \x09 和 \cI。

    \v:匹配一个垂直制表符。等价于 \x0b 和 \cK。

    \s:匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

    \S:匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

  3.特殊字符
    作用:在正则表达式处理中,有特殊意义的字符。  

    . (点):匹配除换行符以外的任意字符

    \w:匹配字符数字,等同于[A-Za-z0-9]

    \d:数字,等同于[0-9]

    \b:单词开始或结尾。例如:“er\b”匹配"nerver"的第二个结尾处的"er",不匹配"verb"的“er”,因为不是以"er"结尾

    ^:开始标识。例如“^a\d”只能匹配“a1”以字母“a”开头的字符串

    $:结束标识。例如"\da$"只能匹配"1a"以字母"a"结尾的字符串

    *:匹配字符零次或多次,等同于{0,}。例如"ab*c"可以匹配"ac","abc","abbc"等在字母"a"与"c"之间包含零个或多个"b"。但不能匹配"abdc"。

    +:匹配一次或多次,等同于{1,}。

    ?:匹配零次或一次。等同于{0,1}。

  4.转义字符

    作用:查找元字符时使用。

    例如:查找 “.” 需要用“\.”表示。“*” → “\*”。“\” → “\\”。

  5.重复

    作用:表示同一个字符重复的次数。

    “*”,“+”,“?”(见元字符解释)

    {n}:重复n次。例如“ab{3}c”只能匹配“abbbc”。

    {n,}:重复n次或更多次。例如{1,}等同于"+"表示重复一次或更多次。

    {n,m}:重复n到m次。

  6.分支条件

    “|”两边任一表达式均生效。

    例如:匹配电话号码,区号为3位或4位,号码为7位或8位。“0\d{2}-\d{8}|0\d{3}-\d{7}”

  7.分组

    用小括号制定子表达式

    例如:匹配IP地址,(\d{1,3}\.){3}\d{1,3}。但是此方法缺点是可以匹配不符合IP地址规则的字符串如300.500.123.900。

    改进以后能够正确匹配IP地址的表达式为“((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)”

  8.后向引用

    作用:使用小括号置顶一个子表达式后,匹配这个子表达式的字符串被储存,可以在表达式或其他程序中进一步处理。

    规则:从左向右,以分组的左括号为标识,第一个出现的分组为1(使用“\1”表示),依次类推,最大到99。

    例如:“(\w)\1”将匹配两个重复的字母或数字。“aabbc22344”将得到“aa”“bb”“22”“44”而不会匹配“c”与“3”。

  8.1.辅助匹配组(零宽断言)

    作用:作为匹配条件,但不包含在匹配结果中。

    1、正声明(?=) :括号中的模式必须出现在声明右侧,但不作为匹配的一部分。

      例如:"[\w\#]+(?=\.net)"匹配“文字.net”形式的字符串。"C#.net,VB.net,PHP,Java,JScript.net"的结果为“C# VB JScript”。

    2、负声明(?!):括号中的模式必须不出现在声明右侧

      例如:“\b\w*q(?!u)\w*\b”匹配带q后面不是跟随u的单词。“remember aqa bqu ’abc‘”的结果为“aqa”。

    3、反向正声明(?<=):括号中的模式必须出现在声明左侧,但不作为匹配的一部分 。

      例如:“(?<=\bre)\w+\b”匹配以re开头的单词,但re不作为返回。“public remember string ’abc‘”的结果为“member”。

    4、反向负声明(?<!):括号中的模式必须不出现在声明左侧。

      例如:“\b\w*q(?!u)\w*\b”匹配带q后面不是跟随u的单词。“remember aqa bqu ’abc‘”的结果为“aqa”。

五、JS正则函数match,exec,test,search,replace,split

  由于match与exec很相近容易混淆,所以先说明一下区别

  1.exec是正则表达式的方法,而不是字符串的方法,所以参数是字符串。

    例如:var reg = new RegExp("abc");

       var str = "3abc4,5abc6";

       reg.exec(str);

       结果为:“abc”。

  2.match是字符串执行匹配正则表达式,所以参数为正则表达式。

    例如:var reg = new RegExp("abc");

       var str = "3abc4,5abc6";

       str.match(reg);

       结果为:“abc”。

暂时写这么多,有时间继续更新。

时间: 2024-10-24 12:16:57

JavaScript中正则表达式学习笔记的相关文章

javascript之正则表达式学习笔记

正则表达式的声明 直接写在/与/之间 var reg = /...../; 使用RegExp()构造函数 var reg = new RegExp(......); 在ECMAscript 3中RegExp对象类似于引用对象,在ECMAscript 5中RegExp对象类似于值对象. var reg= /a/; var reg2 =/a/; console.log(reg === reg2);//ES3标准返回true,ES5返回false //此时在ES3中reg与reg2指向同一个对象 //

JavaScript正则表达式-学习笔记(不定期更新)

JavaScript权威指南学习笔记,禁止转载! 8.正则表达式 在常见的字符串检索或替换中,我们需要提供一种模式表示检索或替换的规则. 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串. 使用: /\d\d\d/.test("123");  //true new RegExp("Bosn").test("Hi,Bosn");  //true 正则基础: . 任何字符(除换行符以外) /-/.test('[email prote

JavaScript正则表达式学习笔记之一 - 理论基础

自从年前得空写了两篇文章之后就开始忙了,这一忙就是2个月??.当时信誓旦旦说的定期写篇博客的计划也就泡汤了??,不过好在最近有空,顺便总结一下这两个月遇到的几个问题.第一个问题就是项目中用到了一些正则才发现之前被自己忽略的正则是时候补一补了.恰逢今天周六??,就把自己学习JavaScript正则表达式的笔记整理成文,写了这篇关于正则表达式理论基础的文章,希望本文能对有需要的同学提供帮助.号外:本文相对基础,大神请忽略??. 一. 基本概念 正则表达式是用于匹配字符串中字符组合的模式. 一种几乎可

正则表达式学习笔记---揭开正则表达式的神秘面纱

正则表达式学习笔记 如果我们问那些UNIX系统的爱好者他们最喜欢什么,答案除了稳定的系统和可以远程启动之外,十有八九的人会提到正则表达式:如果我们再问他们最头痛的是什么,可能除了复杂的进程控制和安装过程之外,还会是正则表达式.那么正则表达式到底是什么?如何才能真正的掌握正则表达式并正确的加以灵活运用?本文将就此展开介绍,希望能够对那些渴望了解和掌握正则表达式的读者有所助益. 入门简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.我们可以在几乎所有的基于UNIX系统的工具中找到

JavaScript高级程序设计学习笔记--基本概念

1.语句 ECMAScript中的语句以一个分号结尾:如果省略分号,则由解析器确定语句的结尾,如下例所示: var sum=a+b //即使没有分号也是有效的语句--推荐 var diff=a-b; //有效的语句--推荐 虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它.两个原因:1.加上分号可以避免很多错误 2.加上分号也会在某些情况下增进代码的性能,因为这样解析器就不必再花时间 推测应该在哪里插入分号了. 2.变量 var message="hi"; 像这样初始化变量

JavaScript高级程序设计学习笔记--错误处理与调试

try-catch语句 只要代码中包含finally子句,则无论try或catch语句块中包含什么代码--甚至return语句,都不会阻止finally子句的执行,来看下面这个函数: function testFinally(){ try{ return 2; }catch(error){ return 1; }finally{ return 0; } } 调用这个函数会返回0(PS:但我实际执行的时候会先返回0,再返回2) 抛出错误 与try-catch语句相配的还有一个throw操作符,用于

ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录

放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 诸君,我喜欢嫩的--呸呸呸 诸君,我喜欢3D咋了?新事物会替代旧事物不是~ ArcGIS API for JavaScript 4.2概述 AJS 4.2,即ArcGIS API for JavaScript 4.2,是美国ESRI公司针对WebGIS市场推出的.利用JavaScript和Dojo开发的一款产品,它在2016年12月发布.而AJS 4.0 beta则在一年前就发布了. 关于AJS3和AJS4选择的问题,

JavaScript高级程序设计学习笔记--面向对象程序设计

工厂模式 虽然Object构造函数或对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码.为解决这个问题,人们开始使用 工厂模式的一种变体. function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); }; return o; } var

#正则表达式# 学习笔记

以下是我学习正则表达式过程中的学习笔记:详细学习教程推荐正则表达式30分钟入门教程 特殊代码/元字符: \b:单词的开始或结尾. 例如:正则表达式为male,则male或abcmale22都能匹配到.         正则表达式为\bmale\b,则abcmale22不会被匹配到 . :除了换行符以外的任意字符    * :前面的字符可以是任意数量(可以是0次) +:前面的字符可以是任意数量(1次或更多次)      例如:.* 可匹配任意数量不包含换行符的字符      例如:a*可匹配任意数