正则表达式总结

2. 字符类

  • 一般情况下正则表达式一个字符对应字符串一个字符
  • 我们可以使用[]来构建一个简单的类
  • 所谓类是指符合某些特性的对象,一个泛指,而不是特指某个字符
  • 表达式[abc]把字符a或b或c归为一类,表达式可以匹配这类字符
'a1b1c1d1'.replace(/[abc]/g, 'x')  \\"x1x1x1d1"
'a1b1c1d1'.replace(/abc/g, 'x')    \\"a1b1c1d1"
  • 使用^创建反向类/负向类 ,反向类的意思是不属于某类的内容,表达式[^abc]不是a或者b或者c的内容
'a1b1c1d1'.replace(/[^abc]/g, 'x')  \\"axbxcxxx"

3. 范围类

  • 可以使用[a-z]来连接两个字符表示从a到z的任意字符
  • 这个闭区间就是包含a和z本身
'a1b1c1d1'.replace(/[a-z]/g, 'Q')  \\"Q1Q1Q1Q1"
  • 在[]组成的类内部是可以连写的[a-zA-Z]
'2019-01-01'.replace(/[0-9-]/g, 'Q')   \\"QQQQQQQQQQ"

4. 预定义类

  • 正则表达式提供预定义类来匹配常见的字符类
    在这里插入图片描述
//匹配一个ab+数字+任意字符 的字符串
ab[0-9][^\r\n]  ==  ab\d.

在这里插入图片描述

'This is a boy'.replace(/is/g,'0')    \\"Th0 0 a boy"
'This is a boy'.replace(/\bis/g,'0')  \\"This 0 a boy"
'This is a boy'.replace(/\Bis/g,'0')  \\"Th0 is a boy"
'@1@2@abc@h'.replace(/@./g,'Q') \\"QQQbcQ"
'@1@2@abc@h'.replace(/^@./g,'Q') \\"Q@2@abc@h"
'@1@2@abc@h'.replace(/@.$/g,'Q') \\"@1@2@abcQ"

5 量词

在这里插入图片描述
6 贪婪模式和非贪婪模式

  • 贪婪模式是尽量匹配多的字符串
  • 非贪婪模式是让正则表达式尽量少的匹配,一旦成功就不再尝试,做法就是在量词后面加上?
'12345678'.replace(/\d{3,6}/g,'X')   \\"X78"
'12345678'.replace(/\d{3,6}?/g,'X')  \\"XX78"

7 分组

  • 使用()可以达到分组的功能,使量词作用于分组
'a1b2c3d4'.replace(/([a-z]\d){3}/g,'X')  \\"Xd4"
  • 或 使用 | 可以达到或的效果
'abbcaddc'.replace(/a(bb|dd)c/g,'X')  \\"XX"
  • 反向引用 使用 $符号
'2019-08-03'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$3/$2/$1')        
\\"03/08/2019"
  • 忽略分组 不希望捕获某些分组,只需要在分组内加上?: 就可以了
'2019-08-03'.replace(/(?:\d{4})-(\d{2})-(\d{2})/g,'$3/$2/$1') 
\\"$3/03/08"

8 前瞻

  • 正则表达式从文本头部向尾部开始解析,文本尾部方向,称为前
  • 前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言
    在这里插入图片描述
'a2*3'.replace(/\w(?=\d)/g, 'X')
"X2*3"
'a2-33dd3'.replace(/\w(?!\d)/g, 'X')
"aX-3XXdX"

9 text()和exec()方法

  • test() 方法用于检测一个字符串是否匹配某个模式.,如果字符串中有匹配的值返回 true ,否则返回 false
\\不全局匹配的话一直返回true
var ret1 = /\d(\w)\d/g;
var res = "1a23b4";
ret1.test(res) \\true
ret1.test(res) \\true
ret1.test(res) \\false

  • exec() 方法用于检索字符串中的正则表达式的匹配。如果字符串中有匹配的值返回该匹配值,否则返回 null
var ret1 = /\d(\w)\d/g;
var res = "1a23b45c6";
while (ts = ret1.exec(res)) {
 console.info(ts);
}
\\["1a2", "a", index: 0, input: "1a23b45c6", groups: undefined]
\\["3b4", "b", index: 3, input: "1a23b45c6", groups: undefined]
\\["5c6", "c", index: 6, input: "1a23b45c6", groups: undefined]

10 字符串对象方法

  • search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹配的子串,则返回 -1不执行全局匹配,自动忽略标志g
var str="Visit Runoob!"; 
var n=str.search("Runoob"); \\6
  • match()方法 具有g标志将执行全局检索,找到字符串中的所有匹配子字符串,没有找到匹配的字符串将返回null,如果找到一个或多个匹配字符串,将返回数组
var ret1 = /\d(\w)\d/g;
var res = "1a23b4";
console.info(res.match(ret1)); \\ ["1a2", "3b4"]
\\不带g标志 ["1a2", "a", index: 0, input: "1a23b4", groups: undefined]
  • split() 方法用于把一个字符串分割成字符串数组。提示: 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。注意: split() 方法不改变原始字符串
var ret1 = /\d/g;
var res = "1a23b4";
res.split(ret1) \\ ["", "a", "", "b", ""]
  • replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。该方法不会改变原始字符串。
var ret1 = /\d/g;
var res = "a1b2c3d4";
//回调函数 参数 1匹配字符串 2分组,没有则没有这个参数 3匹配字符串index位置 4原字符串
console.info(
  res.replace(/(\d)/g, function(match, ground1, index, origin) {
    console.info(index + "+" + origin + "+" + ground1);
    return parseInt(match) + 1;
  })
);
\\位置:1原字符串:a1b2c3d4分组1
\\位置:3原字符串:a1b2c3d4分组2
\\位置:5原字符串:a1b2c3d4分组3
\\位置:7原字符串:a1b2c3d4分组4
\\a2b3c4d5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值