资讯专栏INFORMATION COLUMN

犀牛书——CHAP10:正则表达式

JessYanCoding / 2927人阅读

摘要:设计目的是为了让在全局范围内有效。在正则表达式后部引用前面的子表达式。传入分隔符或正则表达式。对象属性以下属性返回布尔值。是否包含修饰符以下不返回布尔值整个字符串下一次搜索开始的位置。返回布尔值,若匹配则返回。

1. 正则表达式语法 1.1 表示方法
- `//`字面量模式,`/表达式/修饰符`
- 使用`new RegExp(字符串,修饰符 | 正则表达式)`构造函数。
在ES5中,参数是正则表达式时不允许传入第二个参数。
在ES6中,当第一个参数为正则表达式是,可以传入第二个参数修饰符,这时第二个参数的修饰符会覆盖第一个参数正则表达式之中的修饰符。
1.2 字符类[]

[]:匹配[]中的任意字符

[^]:不在[]中的任意字符

.:除换行符或其他终止符之外的任意字符。
以下的大写都是小写的取反:

w:[a-zA-Z0-9]

W:[^a-zA-Z0-9]

s:任意unicode空白符

S:[^s]

d:[0-9]

D:[^0-9]

[]:退格

1.3 重复

{n,m}:出现n<= 次数 <= m

{n,}: >=n 次

{n}: n次

? : {0,1}

+ : {1,}

* : {0,}

以上情况是尽可能多的匹配,称为贪婪匹配.
在重复次数后面加上“?”,如“+?”则为尽可能少的匹配,称为非贪婪匹配。

var r1 = /a+/
var r2 = /a+?/
var str = "aaa"

str.match(r1) //["aaa"]
str.match(r2) //["a"]
1.4 位置

^:匹配开头

$:匹配结尾

:匹配一个单词的边界,注意与[]的区别

B:非单词的边界

/x(?=y)/:称为“先行断言”。只匹配在y前面的x.

/x(?!y)/:称为“先行否定断言”。只匹配在y前面的x.

1.5 修饰符

i:大小写不敏感

g:全局匹配。即找到所有,而不是找到一个就停止。

y:(ES6新增)粘连修饰符。与g相似。但y下一次开始查找时从匹配的下一个位置开始,即如果下一个位置不匹配则返回null.而g只要剩余位置存在匹配即可。设计目的是为了让^在全局范围内有效。

m:多行匹配。即匹配一行的开头结尾 + 字符串的开头或结尾

u:(ES6新增)。主要针对ES6对Unicode字符进行扩展之后的匹配。包括对.,{}中的改善。详见阮一峰老师的ES6教程

1.6 选择

|: 相当于“或”。即/ab|cd/可以匹配“ab”,也可以匹配“cd”。但它从左至右匹配,直到发现匹配项。即若你以匹配“ab”,则不匹配“cd”.

1.7 分组/引用

圆括号的作用:

1. 即把很多项组合成独立的单元来处理。
2. 定义子模式。即在已匹配中找到符合圆括号内的匹配项。
3. 在正则表达式后部引用前面的子表达式。即后面可以使用`
`来表示匹配的表达式是前面的括号中的表达式.`
`中的n代表第几个括号。

2. String的正则方法

search():传入正则表达式,若传入的是字符串,则会转为正则表达式。返回第一次匹配项的起始位置。若不匹配,则返回-1.

replace():第一个参数可以是正则表达式也可以是字符串,第二个参数是要将与第一个参数匹配的匹配项替换的东西,可以是函数或字符串。若为函数,则参数为macth,(p1,p2..),offset,str.match为匹配项,(p1,p2..)为第n个括号匹配的字符串,offset是匹配项在调用字符串中的位置,str是调用的字符串。若正则表达式中含//g,则会将全部匹配项都替换。返回替换后的字符串。

match():返回数组。若包含全局修饰符g,则数组元素分别为每次的匹配项。若为传入g,则数组第一个元素是匹配项,后面分别为圆括号的匹配项。返回的数组包含inputindex属性。input表示调用字符串,index表示匹配项在调用字符串中的索引。

split():返回数组。传入分隔符或正则表达式。

3. RegExp对象 3.1 RegExp属性

以下属性返回布尔值。即是否包含相应修饰符。

- `global`
- `multiline`
- `ignoreCase`
- `sticky`:是否包含`y`修饰符

以下不返回布尔值

- `lastIndex`:整个字符串下一次搜索开始的位置。
- `source`:正则表达式文本。
- `flags`:使用了哪些修饰符
3.2 RegExp方法

exec():传入字符串。不管什么时候都返回与不传入gmatch方法相同的数组。第2次调用该方法时会从lastIndex位置开始。可以设置lastIndex属性执行下一次开始查找匹配的位置。input表示调用字符串,index表示匹配项在调用字符串中的索引。

test():传入字符串。返回布尔值,若匹配则返回true。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79833.html

相关文章

  • 犀牛——CHAP6:对象

    摘要:对象是属性的无序集合。使用对象直接量创建的对象的原型就是,使用运算符创建的对象的原型是构造函数的的值。主要目的是将对象锁定,避免外界干扰。判断对象是否封闭。删除属性可删除对象的自有属性且为的属性。 对象是属性的无序集合。因此,这一章主要从对象和属性两个方面来阐述。showImg(https://box.worktile.com/view/c8f5f376fe314aeca69d9b4c...

    philadelphia 评论0 收藏0
  • 犀牛——CHAP8:函数

    摘要:若有函数名,则在函数体内指代该函数本身,并且只存在于函数体中。返回值与普通函数相同。如果嵌套函数作为普通函数调用,则指向全局对象或者构造函数调用在函数或者方法调用之前使用关键字,则为构造函数调用。创建一个新的对象继承构造函数的属性。 showImg(https://box.worktile.com/view/ddbade8c84bb41cdb20db15228584b8e?pid=4b...

    he_xd 评论0 收藏0
  • 犀牛——CHAP7:数组

    摘要:数组有以下特点无类型数组元素可以是任意元素。因此,当小于数组最大索引时,大于的数组元素会被删除。原数组不会改变将数组元素转换为字符串并连接在一起。默认将数组元素用,连接,传入的参数即为连接符。 showImg(https://box.worktile.com/view/fcfcdf2c99b14edfb6768085955ae253?pid=4b0845b09ca94218a955f8...

    Alfred 评论0 收藏0
  • 《JavaScript权威指南》随笔(一)

    摘要:每个构造函数定义了一类对象,表示由构造函数初始化对象的集合。严格模式下,明确禁止八进制数。日期和时间构造函数用来创建表示日期和时间的对象,包含方法。模式匹配函数是一个构造函数,创建正则表达式。布尔值表示两种状态,使用保留字和。 《Javascript权威指南》就是前端工程师口中常说的犀牛书,得名是因为中文翻译出版的书籍封面是一只犀牛,是学习JavaScript的必读书籍。 JavaSc...

    SwordFly 评论0 收藏0
  • Part1程序设计基础(Java语言程序设计(10th))

    摘要:缘起这是语言程序设计的,计划之前全部整理完。产生随机数的方法。复习题双分支语句复习题嵌套的语句和多分支语句复习题常见错误和陷阱常见错误两个浮点数值的相等测试复习题产生随机数产生一个到之间的随机值,不包括。 缘起 这是《Java语言程序设计(10th)》的Part1,计划2017-12-31之前全部整理完。 2017-12-23开始想看这本书的,并同时开始实践起Java来的。 Part...

    BDEEFE 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<