js正则表达式基本语法

正则表达式在线测试工具
http://tool.oschina.net/regex/

JavaScript中通过内置对象RegExp支持正则表达式
两种方式实例化RegExp

1字面量 var reg=/\bis\b/g
2构造函数  var reg=new RegExp("\\bis\\b","g") 
// js中反斜线本来就是特殊字符写两次是为了转义。

元字符

\t   水平制表符
\v   垂直制表符
\n   换行符
\r   回车符
\0   空字符
\f   换页符
\cX  与x对应的控制字符(ctrl+X)

字符类

[abc]把字符a、b、c归为一类
如 'abcde'.replace(/[abc]/g,A) ="AAAde";

字符类取反

[^abc]
如'abcde'.replace(/[^abc]/g,A) ="abcAe";

范围类

[a-z] 闭区间 包括a到z任意字符
[a-zA-Z] 
[a-zA-Z-] 匹配- 

预定义类

.     [^/r/t]  除了回车符和换行符之外的所有字符 
\d	  [0-9] 数字
\D    [^0-9] 非数字
\s    [\t\n\x\0B\f\r] 空白符
\S    [^\t\n\x\0B\f\r] 非空白符
\w    [a-zA-Z_0-9] 单词字符(字母,数字,下划线)
\W	  [^a-zA-Z_0-9] 非单词字符(字母,数字,下划线)

修饰符

g global  全文搜索匹配
i ignore case 忽略大小写,默认为大小写敏感
m multiple lines 多行搜索
lastIndex 是当前表达式匹配的最后一个字符的下一个位置	
source 正则表达式的文本字符串

m multiple lines 多行搜索
在这里插入图片描述
边界

  ^  以xx开始  在[]中表示取反
  $  以xx结束
  \b 单词边界
  \B 非单词边界

量词

  ? 零次或者一次
  + 一次或者多次
  * 任意次
  {n} 出现n次
  {n,m} 出现n次到m次
  {n,} 至少出现n次  

贪婪模式

\d{1,3}

尽可能多的匹配
在这里插入图片描述

非贪婪模式
在量词后面加上?

\d{1,3}?

在这里插入图片描述
后边多一个?表示懒惰模式。
必须跟在*或者+后边用
如:

<img src="test.jpg" width="60px" height="80px"/>

如果用正则匹配src中内容非懒惰模式匹配
src=".*"
匹配结果是:src=“test.jpg” width=“60px” height=“80px”
意思是从="往后匹配,直到最后一个"匹配结束

懒惰模式正则:
src=".*?"
结果:src=“test.jpg”
因为匹配到第一个"就结束了一次匹配。不会继续向后匹配。因为他懒惰嘛。

.表示除\n之外的任意字符
*表示匹配0-无穷
+表示匹配1-无穷
分组
针对于量词匹配

/([a-z]\d){3}/g

在这里插入图片描述

/Byron|Casper/ , 匹配的是 Byron或者Casper , | 两边默认有分组
/Byro(n|C)asper/   匹配的是Byronaspe或ByroCasper

反向引用

'2016-12-09'.replace(/(\d{4})-(\d{2})-(\d{2})/g,)

在这里插入图片描述
忽略分组
在分组内加上?:

/(?:zcq)(ok)/

在这里插入图片描述
前瞻

'a2*3aa3'.replace(/\w(?=\d)/g,"A")  正向前瞻
'a2*3aa3'.replace(/\w(?!\d)/g,"A")   反向前瞻

(?=\d)断言部分不算在匹配规则内,只作为过滤条件
在这里插入图片描述
^用法
用法一: 限定开头

文档上给出了解释是匹配输入的开始,如果多行标示被设置成了true,同时会匹配后面紧跟的字符。 比如 /^A/会匹配"An e"中的A,但是不会匹配"ab A"中的A

用法二:(否)取反

当这个字符出现在一个字符集合模式的第一个字符时,他将会有不同的含义。

比如: /[^a-z\s]/会匹配"my 3 sisters"中的"3" 这里的”^”的意思是字符类的否定,上面的正则表达式的意思是匹配不是(a到z和空白字符)的字符。
表示限定开头的示例:
/[(^\s+)(\s+$)]/g
表示否定的示例:
[^a]表示“匹配除了a的任意字符”。
[^a-zA-Z0-9]表示“找到一个非字母也非数字的字符”。
经过对比,只要是”^”这个字符是在中括号”[]”中被使用的话就是表示字符类的否定,如果不是的话就是表示限定开头。我这里说的是直接在”[]”中使用,不包括嵌套使用。
其实也就是说”[]”代表的是一个字符集,”^”只有在字符集中才是反向字符集的意思。

$
$是正则表达式匹配字符串结束位置

\1
表示所获取的第1个()匹配的引用

var str = “Hellllo world”;
str = str.replace(/(l)\1/g, ‘$1’);
对于正则表达式 /(l)\1/g,其中(l)是第一个分组,\1指向第一个分组,即\1重复了第一个分组的内容,所以该正则表达式可以表示成/(ll)/g
而对于第二个参数$1,表示用第一个分组的内容 l 对匹配到的部分进行替换(即 ll 替换成 l ),同时正则表达式有g表示全局匹配,所以4个ll被替换成2个ll。

方法

RegExp.prototype.test(str)

用于测试字符串参数中是否存在匹配正则表达式模式的字符串
存在 true
不存在 false
test方法加g标志导致正则表达式不稳定
在这里插入图片描述
原因:lastIndex

  RegExp.prototype.exec(str)

使用正则表达式对字符串进行搜索,并将更新全局RegExp对象的属性以反映匹配的结果
如果没有匹配的文本则发挥null,否则返回一个结果数组:
index 声明匹配文本的第一个字符的位置
input 存放被检索的字符串string
在这里插入图片描述

字符串对象方法

String.prototype.search(reg)

search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串
方法返回第一个匹配结果的index,查找不到返回-1
search()方法不支持全局匹配,忽略g标志,并且总是从字符串的开始进行检索。
‘aadacff11111’.search(1)
在这里插入图片描述

在这里插入图片描述

String.prototype.match(reg)

match方法将检索字符串,以找到与reg匹配的一个或者多个文本
非全局调用
在字符串中执行一次匹配 ,如果没有找到返回null ,否则返回一个存储匹配到文本的相关信息的数组[“1a2”,“a”],数组中第一个元素存放的是匹配到的文本(“1a2”),而其余的元素存放的是与正则表达式的子表达式匹配的文本(“a”)
除了常规的数组元素之外,返回的数组还有两个对象属性
index 声明匹配文本的起始字符串在字符串中的位置
input 声明对stringObject的应用
在这里插入图片描述
全局调用
在这里插入图片描述

转义
使用反斜杠进行转义
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值