定义

正则表达式是用于匹配字符串中字符组合的模式。

创建正则表达式

两种方式:

1.new RegExp()


  1. let pattern1 = new RegExp('cat'); //第一个参数字符串
  2. let pattern2 = new RegEXP('cat', 'ig'); //第二个参数可选模式修饰符
  • i:忽略大小写
  • g:全局匹配,即模式被应用于所有字符串,而非匹配到第一项时立即停止
  • m:多行匹配
  • y:执行“粘性”搜索,匹配从目标字符串的当前位置开始,可以使用y标志

2.字面量(以下栗子均使用字面量的方式创建正则表达式)


  1. let pattern3 = /cat/;
  2. let pattern4 = /cat/ig;

匹配正则表达式

1.test
在字符串中测试是否匹配的RegExp方法,它返回true或false。


  1. let str = 'This is a cat!';
  2. console.log(pattern4.test(str)); //true

2.exec
在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。


  1. console.log(pattern4.exec(str)); //[cat]

3.match
在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。


  1. console.log(str.match(pattern4)); //[cat]

4.replace
在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。


  1. console.log(str.replace(pattern4, 'dog')); //This is a dog!

5.search
在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。


  1. console.log(str.search(pattern4)); //10

6.split
使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。


  1. console.log(str.split(pattern4)); //["This is a ", "!"]

正则表达式语法

重复匹配(?、*、+、.、{m,n})

  • .匹配除换行符外的任意字符,单个匹配
  • x?匹配0个或1个x
  • x*匹配0个或任意多个x
  • x+匹配至少1个x
  • x{m,n}匹配最少m,最多n个的x,闭区间
  • (xyz){m,n}把xyz看成一个整体,匹配xyz最少m次最多n次
  • chrome|firefox|ie匹配chrome或者firefox或者ie中的任意一个

  1. let str = 'google',
  2. str1 = 'gooooogle',
  3. str2 = 'ggle',
  4. pattern = /g..gle/,
  5. pattern1 = /go*gle/,
  6. pattern2 = /go+gle/,
  7. pattern3 = /g.*gle/,//0个或多个的任意字符
  8. pattern4 = /go?gle/
  9. pattern5 = /go{2,4}gle/,
  10. pattern6 = /go{3}gle/,//匹配3个o->gooogle
  11. pattern7 = /go{3,}gle/;//匹配3个或3个以上o
  12. console.log(pattern.test(str));//true
  13. console.log(pattern1.test(str));//true
  14. console.log(pattern1.test(str1));//true
  15. console.log(pattern2.test(str1));//true
  16. console.log(pattern2.test(str2));//false
  17. console.log(pattern3.test(str));//true
  18. console.log(pattern3.test(str2));//true
  19. console.log(pattern4.test(str));//false
  20. console.log(pattern7.test(str1));//true

字符类匹配

  • [a-z]*表示任意个a-z中的字符
  • [A-Z]*表示任意个A-Z中的字符
  • [0-9]*表示任意个0-9中的字符
  • [a-zA-Z0-9]表示匹配一个以上三种情况下的任意一个字符
  • [^0-9]表示非0-9的任意字符
  • ^[0-9]表示以0-9为起始字符,^表示从起始位置开始匹配
  • [0-9]$表示以0-9为结束字符,$表示匹配结束位置
  • /d匹配数字,同[0-9]
  • /D匹配非数字,同[ ^0-9]
  • /w匹配字母数字及下划线_,同[a-zA-Z0-9_]
  • /W匹配非字母数字及下划线_,同[^a-zA-Z0-9_]
  • \b匹配单词边界
  • \B匹配非单词边界

空白字符

  • \0匹配null字符
  • \f匹配换页字符
  • \n匹配换行符
  • \r匹配回车字符
  • \t匹配制表符
  • \s匹配空白字符、空格、制表符和换行符
  • \S匹配非空白字符

贪婪模式和非贪婪模式
?紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪的(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。


  1. console.log('123abc'.match(/\d+/)); //[123]
  2. console.log('123abc'.match(/\d+?/)); //[1]

捕获和非捕获
(x)匹配 'x' 并且记住匹配项。括号被称为 捕获括号。


  1. console.log(/(\d+)([a-z]+)/.exec('123abc')); //[12abc, 123, abc]
  2. console.log(/(\d+)(?:[a-z]+)/.exec('123abc')); //[123abc, 123]

正向肯定查找和正向否定查找
x(?=y)匹配'x'仅仅当'x'后面跟着'y'.这种叫做正向肯定查找。
x(?!y)匹配'x'仅仅当'x'后面不跟着'y',这个叫做正向否定查找。


  1. console.log(/goo(?=gle)/.exec('google')); //[goo]
  2. console.log(/goo(?=gle)/.exec('goodu')); //null
  3. console.log(/goo(?!gle)/.exec('google')); //null
  4. console.log(/goo(?!gle)/.exec('goodu')); //[goo]

常用的正则表达式

1.手机号(1xxxxxxxxxx):/^1[0-9]{10}$/
2.邮政编码校验:/[1-9][0-9]{5}/
3.匹配汉字:[u4e00-u9fa5]
4.简易邮箱校验:/^([a-zA-Z0-9_.-]+)@([a-zA-Z0-9_.-]+).([a-zA-Z]{2,4})$/

原文地址:https://segmentfault.com/a/1190000016879195

JS应用之正则表达式的更多相关文章

  1. ASP.NET开发中主要的字符验证方法-JS验证、正则表达式、验证控件、后台验证

    ASP.NET开发中主要的字符验证方法-JS验证.正则表达式.验证控件.后台验证 2012年03月19日 星期一 下午 8:53 在ASP.NET开发中主要的验证方法收藏 <1>使用JS验 ...

  2. js如何使用正则表达式实现过滤HTML标签?(/<[^<>]+>/g)

    js如何使用正则表达式实现过滤HTML标签?(/<[^<>]+>/g) 一.总结 js进阶正则表达式实现过滤HTML标签(<>标签中不能包含标签实现过滤HTML标签 ...

  3. JavaScript -- 时光流逝(六):js中的正则表达式 -- RegExp 对象

    JavaScript -- 知识点回顾篇(六):js中的正则表达式 -- RegExp 对象 1. js正则表达式匹配字符之含义      查找以八进制数 规定的字符.     查找以十六进制数 规定 ...

  4. JS中应用正则表达式转换大小写

    JS中应用正则表达式转换大小写,代码很简单,看代码: 以下首字母大写,其它字母小写 <script type="text/javascript"> function r ...

  5. js学习之正则表达式

    js学习之正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex.regexp或RE)使用单个字符串来描述.匹配一系列符合某个句法规则的字符串搜索模式 一:语法 ...

  6. 如何在JS中应用正则表达式

    背景:在之前的随笔中写过C#中如何使用正则表达式,这篇随笔主要讲如何在js中应用正则表达式 如下代码: $("#zhengze").click(function () { var ...

  7. js如何使用正则表达式验证电话号码(可选区号)和邮箱?(分步骤)

    js如何使用正则表达式验证电话号码(可选区号)和邮箱?(分步骤) 一.总结 js进阶正则表达式16电话号码和邮箱正则(分类解决邮箱验证)(分组加?解决电话号码区号选择问题)([\w\.-]中括号解决邮 ...

  8. 【JS基础】正则表达式

    正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...

  9. JS中给正则表达式加变量

    前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下.   一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...

  10. js与java正则表达式处理字符串问题

    在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码.合理使用正则表达式确实会为程序员省去很多字 ...

随机推荐

  1. hdu 3038 How Many Answers Are Wrong【带权并查集】

    带权并查集,设f[x]为x的父亲,s[x]为sum[x]-sum[fx],路径压缩的时候记得改s #include<iostream> #include<cstdio> usi ...

  2. ubuntu 直接用软件的名字启动非apt安装的软件

    方法一: 可以在.bashrc文件中加入 alias命令,把软件的名字就等于软件执行文件的绝对路径 方法二: 在/usr/bin 目录下为执行文件创建软链接(未尝试)不过应该可以 软件自启动的方法 在 ...

  3. Ubuntu 18.04 LTS 常见问题解决 2

    1 每次重启后都有system program problem detected sudo gedit /etc/default/apport 然后将打开的文件中的enabled=1改为0,原因暂时不 ...

  4. spring cloud feign 调用接口报错"No message available

    There was an unexpected error (type=Internal Server Error, status=500). status 404 reading HelloServ ...

  5. codeforces 629C Famil Door and Brackets (dp + 枚举)

    题目链接: codeforces 629C Famil Door and Brackets 题目描述: 给出完整的括号序列长度n,现在给出一个序列s长度为m.枚举串p,q,使得p+s+q是合法的括号串 ...

  6. jmeter(二十)JMeter中返回Json数据的处理方法

    Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...

  7. 接口测试01 - HTTP协议报文结构及示例

    HTTP基本架构 用一张简单的流程图来展示HTTP协议的基本架构,以便先有个基础的了解. 1)Web Client可以是浏览器.搜索引擎等等一切基于HTTP协议发起http请求的工具. 2)Web S ...

  8. mysql 三大范式【转载】

    第一范式(1NF,normal format):字段不能再分. 这是字段的原子性.例如:字段“学期时间”:2014-9-1,2015-1-15. 这个字段“学期时间”可以再分为“学期开始时间”,201 ...

  9. AJPFX总结java开发常用类(包装,数字处理集合等)(三)

    4.Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射.对于键对象来说,像Set一样,一 个Map容器中的键对象不允许重复,这是为了保持查找 ...

  10. 如何使用 Java 生成二维码

    步骤 下载jar包(QRCode.jar) maven项目手动引入jar包 编写实体类实现二维码的生成 controller调用 下载jar包(QRCode.jar) 下载网址如下: QRCode生成 ...