正则笔记

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"]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 正则表达式常见用例 原

    正则表达式是用于匹配字符串中字符组合的模式。在js中,正则表达式也是对象,这些对象被用于RegExp的exec和test方法,以及String的match、re...

    tianyawhl
  • canvas像素操作 原

    (adsbygoogle = window.adsbygoogle || []).push({});

    tianyawhl
  • webAPP页面切换之滑动-swiper2(切换页面默认显示顶部)

    最近做一个web页面,希望在手机上能滑动切换页面,第一次这种要求,在网上找到了一个插件swiper,swiper2可以在电脑和手机上使用,于是选择这个插件,在使...

    tianyawhl
  • PHP删除字符串中非字母数字字符方法总结

    可以使用preg_replace()函数删除非字母数字字符。此函数执行正则表达式搜索和替换。函数preg_replace()搜索由pattern指定的字符串,如...

    砸漏
  • python之commands模块(执行

    用于执行Linux shell命令,要获得shell命令的输出只需要在后面参数写入('命令')就可以了。

    py3study
  • 动手学深度学习(一)——逻辑回归(从零开始)

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.csdn....

    Tyan
  • 【带着canvas去流浪(8)】碰撞

    经过前面章节相对枯燥的练习,相信你已经能够上手canvas的原生API了,那么从这一节开始,我们就开始接触点好玩的东西——动画。

    大史不说话
  • EC2上的深度学习:CUDA 7/cuDNN/caffe/DIGITS实战教程

    用户1737318
  • 视频会议系统EasyRTC常见的几种架构方式及应用场景:MCU/SFU、视频会议、应急指挥、即时通信

    我们这里常说的RTC可以理解为WebRTC技术,因为WebRTC技术是目前使用最广泛的即时通信技术,虽然在早期我们提到WebRTC、提到视频通话就会想到P2P的...

    EasyNVR
  • webAPP页面切换之滑动-swiper2(切换页面默认显示顶部)

    最近做一个web页面,希望在手机上能滑动切换页面,第一次这种要求,在网上找到了一个插件swiper,swiper2可以在电脑和手机上使用,于是选择这个插件,在使...

    tianyawhl

扫码关注云+社区

领取腾讯云代金券