[技术学习]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),其他区别如下例子:
- var str='once two three';
- var pattern=/\S+/g;//全局匹配的正则
- alert(str.match(pattern))//结果为一个数组,one,two,three
- alert(pattern.exec(str))//匹配结果为one
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?
[技术学习]js正则表达式汇总的更多相关文章
- [技术学习]js接口继承
js是面向对象语言,但是js又缺乏了面向对象的诸多特性,比如继承,没有接口继承也没有父类继承,因此有时候需要人工来实现继承. 一.首先看下java中面向对象的继承: //定义类鸟类的飞行动作 inte ...
- [技术学习]js继承
今天又看了一遍js的面向对象方面的知识,重点看了继承相关内容,已经记不得看了第几次这个内容,终于觉得自己好像懂了,特记录下来过程. js面向对象继承分为两大类,主要分为对象继承和非对象继承(拷贝继承) ...
- 1.精通前端系列技术之js正则表达式
在不会正则的时候,我们寻找字符串某些规律或者截取部分特殊字符的时候,我们需要写很多行代码来获取我们想要的字符串,在使用正则之后,代码量会大量简洁很多 1.字符串的比较,判断是否数字类型的字符串,我们用 ...
- 学习js正则表达式
function UrlRegEx(url) { //如果加上/g参数,那么只返回$0匹配.也就是说arr.length = 0 var re = /(\w+):\/\/([^\:|\/]+)(\:\ ...
- VC++/MFC(VC6)开发技术精品学习资料下载汇总
工欲善其事,必先利其器,VC开发MFC Windows程序,Visual C++或Visual Studio是必须的,恩,这里都给你总结好了,拿去吧:VC/MFC开发必备Visual C++.Visu ...
- js学习之正则表达式
js学习之正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex.regexp或RE)使用单个字符串来描述.匹配一系列符合某个句法规则的字符串搜索模式 一:语法 ...
- JS正则表达式学习记录
JS:正则表达式学习记录 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- js常用正则表达式汇总
常用的前台正则表达式汇总. 1.手机号验证 手机格式以1开头,现有的手机格式一般为13.14.15.17.18等 var regMobile = /^1[34578]\d{9}$/; //或者为/^1 ...
- [转]JS学习之正则表达式
js正则表达式实例 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证 •替换文本.可以在文档 ...
随机推荐
- 【编程题目】一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值★★ (自己没有做出来!!)
45.雅虎(运算.矩阵): 2.一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值 比如{3,2,4,3,6} 可以分成 {3,2,4,3,6} m=1; {3,6}{2,4 ...
- HDU 5884 Sort -2016 ICPC 青岛赛区网络赛
题目链接 #include <iostream> #include <math.h> #include <stdio.h> #include<algorith ...
- java实现批量上传(swfupload)
下载 swfupload 文件夹 里面包含handlers.js,swfupload.js,swfupload.swf 三个文件. 我的是和ssh项目整合在一起的.因为struts2的拦截器会拦截所有 ...
- iOS添加另一个控制器的时候要注意啊
ios的父控制器控制器和子控制器之间的注意点: " >> #warning 需要把新创建出来的控制器添加成子控制器 . 不然子控制器里面的子控件无法响应点击事件 " 一 ...
- hdu2108(判断凸多边形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2108 题意: 给出一个多边形的所有顶点,判断是不是凸多边形: 思路: 判断凸多边形的方法比较多,如:若 ...
- JavaScript基础——理解变量作用域
一旦你开始在JavaScript应用程序中添加条件.函数和循环,就需要理解变量作用域.变量作用域规定了如何确定正在执行的代码行上的一个特定变量名的值. JavaScript允许你既定义全局版本又定义局 ...
- (编辑器)Jquery-EasyUI集合Kindeditor编辑器
1.在html里面添加 list.html list.html (function ($, K) { if (!K) throw "KindEditor未定义!"; functio ...
- 关于Mesos和Kubernetes的区别
这个主题应该和服务发现注册一样,进入视野...
- 莫队算法 2038: [2009国家集训队]小Z的袜子(hose)
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 ...
- 攻城狮在路上(壹) Hibernate(四)--- 对象标识符(OID)生成机制
Hibernate使用对象标识符(OID)来建立内存中对象和数据库表中记录的对应关系,对象的OID和数据库的主键对应.为了保证OID的唯一性和不可变性,应该让Hibernate来为OID赋值.Hibe ...