前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript 正则表达式介绍

JavaScript 正则表达式介绍

作者头像
前端GoGoGo
发布2018-08-27 10:41:15
5530
发布2018-08-27 10:41:15
举报
文章被收录于专栏:九彩拼盘的叨叨叨

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

创建

var reg = new RegExp(pattern,modifiers);var reg = /pattern/modifiers;

modifiers包括

  • g : 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) 如
  • i : 执行对大小写不敏感的匹配
  • m : 执行多行匹配,具体见这里 ps 新建一正则时可多个模式,如 /hEllO/ig

正则相关方法

  • .test()。该方法对一个字符串进行匹配。并根据匹配结果返回true或false。例如
代码语言:javascript
复制
/e/.test('The best things in life are free'); //true
  • .exec()。该方法将对一个字符串进行匹配。并返回第一个匹配项目。例如:
代码语言:javascript
复制
/e/.exec('The best things in life are free'); // ["e"]

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

代码语言:javascript
复制
'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
代码语言:javascript
复制
'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. 更多习题

进阶

贪婪和非贪婪模式

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

代码语言:javascript
复制
/(\d+)(\d+)/.exec('12345');//结果["12345", "1234", "5"]

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

代码语言:javascript
复制
/(\d+?)(\d+)/.exec('12345');//结果["12345", "1", "2345"]

更详细的的解释,点这里

非捕获性分组

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

代码语言:javascript
复制
/(?:\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)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014.07.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建
  • 正则相关方法
  • 正则中的元字符
  • 正则表达式中的括号
    • 大括号 ()
      • 方括号 []
      • 量词
      • 习题
      • 进阶
      • 贪婪和非贪婪模式
      • 非捕获性分组
      • 匹配
      • 正则拓展库
      • 习题答案
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档