[技术学习]js正则表达式汇总

一、常用正则表达式关键字

".":任意字符
"*":任意个数
"+":任意个数,至少一个
"?":0-1个
"\d":任意个数数字,至少一个 digit
"\w":任意数字字母,下划线 word
"\s":任意空白,空格,tab,换行符,至少一个 space
\:转义符
[]:匹配一些字符
-:例如0-5,从几到几
^:任意的非字符
\S:所有非空白
{4}:字符出现次数等4
{2,4}:字符出现2-4次
{2,}:至少2个
$:字符串的边界
\b:单词的边界,前边界或者后边界
^和$一起使用,是匹配最初和最后
(|)正则表达式分组
\1反向引用,正则表达式记住的部分
(?=\s) 断言的语法,匹配左侧或者右侧,符合条件的

二、js中正则表达式使用的常用语法:

  上述例子为正则表达式的一种常用方式,正则表达式在js中主要使用场景为:

  1、test:校验字符串是否符合要求格式,主要在验证时候使用,关键字为pattern.test(str),返回结果为true,或者false

var pattern=/^\d+$/; //定义正则表达式
var str=123; //定义字符串
alert(pattern.test(str)) //使用正则表达式校验字符串

  2、exec:获取字符串中与正则表达式匹配的内容

        var pattern=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/; //正则表达式,匹配以空格开始,带有<>标签的内容
        var str=‘  <aa> #ab‘ //测试字符串
        alert(pattern.exec(str)) ;//<aa> #ab,<ab>,

  根据()进行分组,匹配结果为一个数组a[],a[0]为最长匹配到的字符串,a[1]为第一个数组,a[2]为第二个小括号匹配的内容,依次类推,如果某个小括号内的匹配不显示到数组中,需要加?:进行过滤,具体含义参考?:的用法。

  3、replace:对数据进行局部或者全局替换

        var str=‘8google8 8google8 8google8‘;
        var pattern=/8(.*)8/; //贪婪模式,匹配到的为整个字符串 <strong>google8 8google8 8google</strong>
        var pattern=/8(.*?)8/; //非贪婪模式,替换结果为<strong>google</strong> 8google8 8google8
        var pattern=/8(.*?)8/g; //非贪婪模式,g表示全局替换,结果为<strong>google</strong> <strong>google</strong> <strong>google</strong>
        alert(str.replace(pattern,‘<strong>$1</strong>‘));

  将字符串匹配部分替换为为指定的字符串,其中可以根据分组,使用$1..保留源字符串的部分内容。

  4、match,与exec使用方法类似,不过exec是正则的方法,match是str的方法,因此使用上为str.match(pattern),其他区别暂时不说明

  5、search,使用

/*使用search 来查找匹配数据*/
var pattern = /box/ig;
var str = ‘This is a Box!,That is a Box too‘;
alert(str.search(pattern)); //查找到返回位置,否则返回-1

  6、split

/*使用split 拆分成字符串数组*/
var pattern = / /ig;
var str = ‘This is a Box!,That is a Box too‘;
alert(str.split(pattern)); //将空格拆开分组成数组

三、几个重要概念

  1、贪婪模式和非贪婪模式

  在正则表达式匹配过程中,默认匹配最多的字段,例如以/8.*8/进行匹配‘8google8 8google8 8google8‘,由于.*可以匹配任意字符串,所以默认为以收尾为8除去后,匹配尽可能多的要素,所以结果为‘8google8 8google8 8google8‘,如果要改为遇到第一个8就截止,则需要改为/8.*?8/,表示不贪婪,匹配结果为8google8。

  在设计模式中类比单例模式的饿汉模式和懒汉模式,饿汉就是很饥饿,尽可能多的需要食物,懒汉就是直到需要的时候,才去申请食物。

  2、锚字符

  在正则表达式有些特殊字符,有具体的含义

  ^:表示此次匹配必须从行首开始匹配

  $:此次匹配的结尾必须与行尾匹配

  \b:匹配字符串边界,以下表达式可以匹配‘google aaa‘,但无法匹配’googleaaa‘

        var str= "google aaa" ;
        var pattern=/google\b/
        alert(pattern.test(str))

  3、正则表达式分组概念

  在正则表达式中,可以使用()进行分组,分组在exec,match等函数中会返回匹配到的整个字符串和分组的情况,使用$1或者\1等可以获取某个指定分组

  4、可选修饰词 /\w/igm

  i 忽略大小写
  g 全局匹配
  m 多行匹配

  5、问号"?"的使用,问号作为正则表达式特殊字符有以下几种使用方法:

    5.1:当做真实问号使用    \?

    5.2:表示0次或1次    \w? 表示0-1次字符

    5.3:表示非贪婪模式, \w*? 表示非贪婪的匹配任意多个字符

    5.4:表示非捕获?:,goo(?:.*)8 使用exec等捕获时.*内容不会作为单独分组

    5.5 表示前瞻捕获?=  goo(?=gle)  //goo 后面必须跟着gle 才能捕获

    举一个极端的例子

        var str= "gaoo?gle aaa" ;
        var pattern=/(?:ga??oo\?(?=gle))/ //此正则中有五个问号,含义各不相同:1、整个分组不会被捕捉,2、表示g后又0个或者1个a,3表示对a采用非贪婪匹配4、表示匹配实际的?号,5表示整个匹配获取必须以gle结尾,但又不包括gle
        alert(pattern.exec(str)) //匹配结果:gaoo?
时间: 2024-08-07 21:21:01

[技术学习]js正则表达式汇总的相关文章

1.精通前端系列技术之js正则表达式

在不会正则的时候,我们寻找字符串某些规律或者截取部分特殊字符的时候,我们需要写很多行代码来获取我们想要的字符串,在使用正则之后,代码量会大量简洁很多 1.字符串的比较,判断是否数字类型的字符串,我们用字符编码范围来判断 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; ch

[技术学习]js接口继承

js是面向对象语言,但是js又缺乏了面向对象的诸多特性,比如继承,没有接口继承也没有父类继承,因此有时候需要人工来实现继承. 一.首先看下java中面向对象的继承: //定义类鸟类的飞行动作 interface BirdFlyable { public void fly(); } //鸟类 class Bird implements BirdFlyable{ public void fly(){ System.out.println("bird is flying"); } } //蝙

[技术学习]js继承

今天又看了一遍js的面向对象方面的知识,重点看了继承相关内容,已经记不得看了第几次这个内容,终于觉得自己好像懂了,特记录下来过程. js面向对象继承分为两大类,主要分为对象继承和非对象继承(拷贝继承),这次主要谈对象继承.对象继承主要有两种:原型继承和对象冒充继承. 一.原型继承,将子类的原型引用父类的实例,从而达到将子类的原型与父类的原型和父类的构造函数关联起来的目的. function Person(name){ this.name=name; } Person.prototype.sayN

编解码技术学习网站汇总

1.音视频开源 1.1 FFMPEG http://www.ffmpeg.org/ http://dranger.com/ffmpeg/ Ffmpeg Basic http://ffmpeg.tv/ http://www.libav.org/ 1.2 H264/AVC http://www.videolan.org/developers/x264.html 1.3 H265/HEVC 1.HM(HEVC test Model) 团队名称 Joint Collaborative Team on V

VC++/MFC(VC6)开发技术精品学习资料下载汇总

工欲善其事,必先利其器,VC开发MFC Windows程序,Visual C++或Visual Studio是必须的,恩,这里都给你总结好了,拿去吧:VC/MFC开发必备Visual C++.Visual Studio.MSDN等下载汇总,甭客气~  啊?还没有开始学C++?那你先学习C++语言基础吧,C/C++语言基础学习资料及视频教程请看这里. 史无前例的网络最全最强C/C++资料索引: C/C++编程语言学习资料尽收眼底 电子书+视频教程 VC++/MFC(VC6)开发技术精品学习资料下载

Js正则表达式学习之test和compile的简单介绍

RegExp 对象用于规定在文本中检索的内容. 定义 RegExp RegExp 对象用于存储检索模式. 通过 new 关键词来定义 RegExp 对象.以下代码定义了名为 patt1 的 RegExp 对象,其模式是 "e": test方法如下 var patt1=new RegExp("e"); RegExp 对象有 3 个方法:test().exec() 以及 compile(). patt1.test("the best things in lif

重新学习老是忘记的JS正则表达式

正则表达式,有木有人像我一样,学了好几遍却还是很懵圈,学的时候老明白了,学完了忘光了.好吧,其实还是练的不够,所谓温故而知新,可以为师矣,今天就随我来重新学习javascript 正则表达式吧. 为啥要有正则表达式呢?其实就是因为计算机笨(这话不是我说的),比如[email protected],我们一看就是邮箱,可是计算机不认识啊,所以我们就要一些计算机认识的语言,来制定好规则,这样计算机就能帮我们找到对应的东西了.所以正则就是用来设置规则,来完成我们需求的一些操作的,比如登录验证啦,搜索指定

js常用正则表达式汇总

常用的前台正则表达式汇总. 1.手机号验证 手机格式以1开头,现有的手机格式一般为13.14.15.17.18等 var regMobile = /^1[34578]\d{9}$/; //或者为/^1[3|4|5|7|8][0-9]\d{8}$/; if(!regMobile.test('手机号')){ alert('手机号格式不正确!'); } 2.邮箱验证 var regEmail = /^(\w-*\.*)[email protected](\w-?)+(\.\w{2,})+$/ 3.固话

JS正则表达式完整教程(略长)

JS正则表达式完整教程(略长) 引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水平的一个侧面标准. 关于正则表达式的教程,网上也有很多,相信你也看了一些. 与之不同的是,本文的目的是希望所有认真读完的童鞋们,都有实质性的提高. 本文内容共有七章,用JavaScript语言完整地讨论了正则表达式的方方面面. 如果觉得文章某块儿没有说明白清楚,欢迎留言,能力范围之内,老姚必做详细解答. 具体章节如下: 引言 第一章 正则表