前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则笔记

正则笔记

作者头像
tianyawhl
发布2020-08-02 17:23:16
5930
发布2020-08-02 17:23:16
举报
文章被收录于专栏:前端之攻略

console.log("http://imgs.jpg".replace(/http:(\/\/.+\.jpg)/,"$1"))      //"imgs.jpg"

console.log("2015/02/23".replace(/(\d{4})[/-](\d{2})[/-](\d{2})/,'$2-$3-$1'))   // "02-23-2015"

边界:正则表达式还提供了几个常用的边界匹配字符

字符

含义

^

以xxx开始

$

以xxx结束

\b

单词边界

\B

非单词边界

 var reg =/\bis\b/g 'he is a body is he'.replace(reg,'IS')     // "he IS a body IS he"

g : global 全文搜索

i : ignore case 忽略大小写 ,默认大小写敏感

m : multiple lines 多行搜索

lastIndex : 当前表达式匹配内容的最后一个字符的下一个位置

source: 正则表达式的文本字符串

 var reg =/\bis\b/gi 'he is a body, Is he'.replace(reg,'0')     // "he 0 a body 0 he" var mulStr = ''@123                        @456                        @789"  // 含有换行符的文本 mulStr.replace(/^@\d/g, 'x')                     //   ''x23                        @456                        @789" mulStr.replace(/^@\d/gm, 'x') // "x23       x56       x89     "

var reg1 = /\w/ var reg2 = /\w/gim reg1.source // "\w" reg1.global  // false reg1.ignoreCase // false reg1.multiline // false

元字符

正则表达式you两种基本字符类型组成:

-- 原义 文本字符

-- 元字符

元字符是在正则表达式中有特殊含义的非字母字符

* + ? $ ^ . | \ ( ) { } [ ]

字符

含义

\t

水平制表符

\v

垂直制表符

\n

换行符

\r

回车符

\0

空字符

\f

换页符

\cX

与X对应的控制字符(Ctrl + X)

范围类

在 [ ] 组成的类内部是这样连写的[a-zA-Z]

'a1b2d3x4z9'.replace(/[a-z]/g, 'Q')   // "Q1Q2Q3Q4Q9" "2016-09-12".replace(/[0-9]/g, 'A')  // "AAAA-AA-AA" "2016-09-12".replace(/[0-9-]/g, 'A')  // "AAAAAAAAAA"

贪婪模式

'12345678'.replace(/\d{3,6}/g,'x')   // 'x78'

非贪婪模式

-- 让正则表达式尽可能少的匹配,也就是说一但成功匹配不再继续尝试

-- 做法很简单,在量词后加上?即可

'123456789'.match(/\d{3,5}?/g)        // ["123", "456", "789"] '12345678'.replace(/\d{3,6}/g,'x')     //"x78" '12345678'.replace(/\d{3,6}?/g,'x')    //"xx78"

分组 使用()可以达到分组的功能,使量词作用于分组

(Byron){3}

'a1b2c3d4'.replace(/([a-z]\d){3}/g,'x')    // "xd4"

忽略分组:不希望捕获某些分组,只需要在分组内加上?:就可以

(?:Byron).(ok)

或:使用 |  可以达到或的效果

Byron | Casper

Byr(on|Ca)sper

'ByronCasper'.replace(/Byron|Casper/g,'x')  // "xx" 'ByronsperByrCasper'.replace(/Byr(on|Ca)sper/g,'x')  //"xx"

字符

含义

出现零次或一次(最多出现一次)

+

出现一次或多次(至少出现一次)

*

出现零次或多次(任意次)

{n}

出现n次

{n,m}

出现n到m次

{n,}

至少出现n次

前瞻 :正则表达式从文本头部向尾部开始解析,文本尾部方向,称为‘前’,前瞻就是正则表达式匹配到规则的时候,向前检查是否符合断言

符合和不符合特定断言称为 肯定/正向匹配和否定/负向 匹配

名称

正则

正向前瞻

exp(?=assert)

负向前瞻

exp(?!assert)

'a2*3'.replace(/\w(?=\w)/g,'x')    // "x2*3" 'a2*34v8'.replace(/\w(?=\w)/g,'x')  // "x2*xxx8" 'a2*34vv'.replace(/\w(?!\d)/g,'x')    //"ax*3xxx"   // 不会替换前瞻,只是作为判断条件

字符

等价类

含义

.

[^\r\n]

除了回车符和换行符之外的所有字符

\d

[0-9]

数字字符

\D

[^0-9]

非数字字符

\s

[\t\n\x0B\f\r]

空白符

\S

[^\t\n\x0B\f\r]

非空白符

\w

[a-aA-Z_0-9]

单词字符(字母,数字,下划线)

\W

[^a-aA-Z_0-9]

非单词字符

‘a1b2c3d4’.replace(/[a,b,c]/g,'x')    //"x1x2x3d4"

RegExp的test()方法

用于测试字符串参数中是否存在匹配正则表达式模式的字符串 如果存在则返回true, 否则返回false var reg1 = /\w/   //使用test方法正则表达式不要写成全局(会受到reg1的lastIndex影响,有时候返回true有时候false,结果不稳定) reg1.test('ab')

 exec()  

var reg = /\d(\w)\d/ var ts = '$1a2b3c4d5e' console.log(reg.exec(ts))     // ["1a2", "a", index: 1, input: "$1a2b3c4d5e", groups: undefined] console.log(reg.exec(ts).toString())   // '1a2,a'

var reg1 = /\d(\w)\d/g var ts = '$1a2b3c4d5e' while (ret = reg1.exec(ts)){       console.log(reg1.lastIndex,ret) }

match() 非全局调用 与 exec()非全局调用返回的结果一样

var reg = /\d(\w)\d/ var ts = '$1a2b3c4d5e' ret = ts.match(reg)  console.log(ret)     // ["1a2", "a", index: 1, input: "$1a2b3c4d5e", groups: undefined] ret.input = "$1a2b3c4d5e"     ret.index= 1

 match() 全局调用

没有找到任何匹配的子串,则返回null

如果找到了一个或者多个子串,则返回一个数组 (数组中存放的是所以得匹配子串。不存在index属性或input属性)

ret = ts.match(reg1) console.log(ret )   // ["1a2", "3c4"]

 replace(要替换的内容,替换成的内容)

第二个参数可以是一个函数 function

function有4个参数

1、匹配字符串

2、正则表达式分组内容,没有分组则没有该参数

3、匹配项在字符串中的index

4、原字符串

ts.replace(/\d/g, function(match,index,origin) {       console.log(index);      return parseInt(match)+1   // "$2a3b4c5d6e" })

 ts.replace(/(\d)(\w)(\d)/g,function(match,group1,group2,group3,index,origin){        return group1+ group2    // "$1ab3cd5e" })

string的search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串 方法返回第一个匹配结果index, 查找不到返回-1 search() 方法不执行全局匹配,它将忽略标志g,并且总是从字符串的开始进行检索

split方法把字符串分割成字符数组

‘a,b,c,d’ .split(',') // ["a","b","c","d"]

在一些复杂的分割情况下我们可以使用正则表达式解决

'a1b2c3d',split(/\d/)  //["a","b","c","d"]

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档