正则表达式就是一个用来描述字符模式的对象。它被用来在文本中执行模式匹配(pattern-matching)以及”查找-替换”(search-and-replace)的任务。javascript中正则的风格类似Perl中正则的风格。

创建

var reg = new RegExp(pattern,modifiers);

var reg = /pattern/modifiers;

modifiers包括

  • g : 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)

    'Hey, Is this all there Is '.replace(/Is/g, 'is');//替换某字符串中所有的Is为is
  • i : 执行对大小写不敏感的匹配
  • m : 执行多行匹配,具体见这里
    ps 新建一正则时可多个模式,如 /hEllO/ig

正则相关方法

  • .test()。该方法对一个字符串进行匹配。并根据匹配结果返回true或false。例如

    /e/.test('The best things in life are free'); //true
  • .exec()。该方法将对一个字符串进行匹配。并返回第一个匹配项目。例如:
    /e/.exec('The best things in life are free'); // ["e"]

在字符串方法中,有match方法,与exec类似。如

'The best things in life are free'.match(/e/); //["e"]

正则中的元字符

正则表达式中的元字符是用来替代一类具有相同属性的字符的特殊字符,它也可以被称为字符类(character class)。

  • . 查找单个字符,除了换行和行结束符。
  • \w 查找单词字符(字母、数字以及下划线”_”)。
  • \W 查找非单词字符。
  • \d 查找数字。
  • \D 查找非数字字符。
  • \s 查找空白字符。
  • \S 查找非空白字符。
  • \b 匹配单词边界。
  • \B 匹配非单词边界。
  • \0 查找 NUL 字符。
  • \n 查找换行符。
  • \f 查找换页符。
  • \r 查找回车符。
  • \t 查找制表符。
  • \v 查找垂直制表符。
  • \xxx 查找以八进制数 xxx 规定的字符。
  • \xdd 查找以十六进制数 dd 规定的字符。
  • \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

正则表达式中的括号

大括号 ()

进行分组。好比email地址,我们就可以将它分为

  1. @前面的部分;
  2. @后面’.’之前的部分;
  3. ’.’之后的部分;
    如果要匹配所有gamil邮箱中@前的用户名中带有jack的替换为joel
    'iamjack007@gmail.com'.replace(/^(\w*)(jack)(\w*)@gmail\.com$/, '$1joel$3@gmail.com');  //"iamjoel007@gmail.com"

    这种类似于模块化的思想,不仅使我们一次可以专注于查找其中的一个小部分,也可以让我们在后面可以轻松的替换其中的某个部分,而不需要纠结于“牵一发而动全身”的痛苦。

方括号 []

用于查找某个范围内的字符

  • [abc] 查找方括号之间的任何字符。
  • [^abc] 查找任何不在方括号之间的字符。
  • [0-9] 查找任何从 0 至 9 的数字。
  • [a-z] 查找任何从小写 a 到小写 z 的字符。
  • [A-Z] 查找任何从大写 A 到大写 Z 的字符。
  • [A-z] 查找任何从大写 A 到小写 z 的字符。
  • [adgk] 查找方括号内的任何字符。
  • [^adgk] 查找不在方括号内的任何字符。

量词

匹配多个。如匹配3个数字可用正则/\d{3}/

  • n+ 匹配任何包含至少一个 n 的字符串。
  • n* 匹配任何包含零个或多个 n 的字符串。
  • n? 匹配任何包含零个或一个 n 的字符串。
  • n{X} 匹配包含 X 个 n 的序列的字符串。
  • n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
  • n{X,} 匹配包含至少 X 个 n 的序列的字符串。
  • n$ 匹配任何结尾为 n 的字符串。
  • ^n 匹配任何开头为 n 的字符串。
  • ?=n 匹配任何其后紧接指定字符串 n 的字符串。
  • ?!n 匹配任何其后没有紧接指定字符串 n 的字符串。

习题

  1. 在字符串”1.5 0 123 -7 -0.4”里面匹配带小数点的数,无论是正的还是负的。
  2. 在字符串”1.5 0 123”中匹配数字([1.5,0,123]),无论是整数还是小数。
  3. 更多习题

进阶

贪婪和非贪婪模式

默认正则匹配是贪婪模式的,即前面的正则匹配尽可能多的。如

/(\d+)(\d+)/.exec('12345');//结果["12345", "1234", "5"]

开启非贪婪模式,量词后面加?

/(\d+?)(\d+)/.exec('12345');//结果["12345", "1", "2345"]

更详细的的解释,点这里

非捕获性分组

在括号内容以?:开头。如:

/(?:\d+)\d+/.exec('123');// 结果 ["123"]

匹配

Lookaround 是 向前匹配(Lookahead) 和 向后匹配(Lookbehind) 的统称。
向前匹配

包括向前正向匹配(Positive Lookahead)和向前负向匹配(Negative Lookahead),语法是 ?= 和 ?!
前正向匹配:匹配任何其后紧接指定字符串 n 的字符串。
向前负向匹配:匹配任何其后没有紧接指定字符串 n 的字符串。

类似的还有向后匹配。
在javascript目前只能使用 Lookahead,还无法使用 Lookbehind。

Lookaround 参考教程:http://www.regular-expressions.info/lookaround.html

正则拓展库

xregexp特性

  1. 支持所有的ES5的正则的语法。
  2. 兼容 Explorer 5.5+, Firefox 1.5+, Chrome, Safari 3+, and Opera 11+。在nodejs上也可以使用。
  3. 比原生正则可读性高。
  4. 比原生正则易用。

更多资源

参考

习题答案

  1. '1.5 0 123 -7 -0.4'.match(/(-?\d+.\d+)/g)
  2. '1.5 0 123'.match(/(\d+.?\d+)|0/g)

javascript正则表达式介绍的更多相关文章

  1. JavaScript正则表达式详解(一)正则表达式入门

    JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...

  2. JavaScript正则表达式下——相关方法

    上篇博客JavaScript 正则表达式上——基本语法介绍了JavaScript正则表达式的语法,有了这些基本知识,可以看看正则表达式在JavaScript的应用了,在一切开始之前,看看RegExp实 ...

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

    定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...

  4. 5分钟教你学会JavaScript正则表达式

    正则表达式在实际开发过程中和技术面试过程中的重要性不言而喻,本文仅仅只是教你如何在几分钟之类学会正则表达式,对于它的原理及运行机制不做介绍. 第一:什么是正则 正则表达式是一种用来描述一定数量文本的模 ...

  5. JavaScript正则表达式学习笔记(二) - 打怪升级

    本文接上篇,基础部分相对薄弱的同学请移步<JavaScript正则表达式学习笔记(一) - 理论基础>.上文介绍了8种JavaScript正则表达式的属性,本文还会追加介绍几种JavaSc ...

  6. javascript 正则表达式补充

    定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...

  7. JavaScript 正则表达式基础语法

    前言 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为相当 ...

  8. javascript正则表达式语法

    1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的 ...

  9. 玩转JavaScript正则表达式

    Why Regular Expression 我们先来看看,我们干哈要学正则表达式这玩意儿: 复杂的字符串搜寻.替换工作,无法用简单的方式(类似借助标准库函数)达成. 能够帮助你进行各种字符串验证. ...

随机推荐

  1. 获取或者设置时,无后缀和A后缀和W后缀的区别

    SetWindowTextW表示设置的字符串是WCHAR (双字节字符 )SetWindowTextA表示设置的字符串是CHAR (单字节字符 )SetWindowText表示设置的字符串是自动匹配当 ...

  2. Python3基础 while配合random输出10个随机整数

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  3. MIME协议生成邮件

    MIME协议生成一封复杂的邮件 MIME协议是对RFC822文档的升级和补充,用MIME协议能生成一封有文字.图片和附件的复杂邮件.首先要导入activation.jar和mail.jar.Mail. ...

  4. Cheatsheet: 2013 08.20 ~ 08.31

    .NET Protobuf-net: the unofficial manual 5 Common C# Misconceptions What is new in the Mono project ...

  5. Create Custom Modal Dialog Windows For User Input In Oracle Forms

    An example is given below to how to create a modal dialog window in Oracle Forms for asking user inp ...

  6. JUnit 单元测试 配置

    选中工程,右键  built path , add liberaries , JUnit , JUnit4 这样就不用每次测试时都在main方法中写了

  7. HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋)

    HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 3 ...

  8. Python数据类型之列表

    一.基本数据类型 整数:int 字符串:str(注:\t等于一个tab键) 布尔值: bool 列表:list (元素的集合) 列表用[] 元祖:tuple 元祖用() 字典:dict注:所有的数据类 ...

  9. CSS笔记(十五)CSS3之用户界面

    参考:http://www.w3school.com.cn/css3/css3_user_interface.asp 在 CSS3 中,新的用户界面特性包括重设元素尺寸.盒尺寸以及轮廓等. 新的用户界 ...

  10. 2016中国APP分类排行榜参选入围产品公示

    2016中国APP分类排行榜参选入围产品公示   由中国科学院<互联网周刊>.中国社会科学院信息化研究中心.eNet硅谷动力共同主办的2016中国APP分类排行榜发布暨颁奖晚宴即将举行.此 ...