正则表达式

JavaScript中使用RegExp对象来封装一个正则表达式,并提供相关的方法和属性

两种创建方法

字面量

let reg = /\bis\b/g; //g表示全文匹配

let str = "He is a boy. This is a dog. Where is she?";

console.log(str.replace(reg, "IS"));

构造函数

let reg = new RegExp("\\bis\\b", "g");

let str = "He is a boy. This is a dog. Where is she?";

console.log(str.replace(reg, "IS"));

修饰符

g:global,全文搜索,若不添加,则搜索到第一个匹配即停止。

i:ignore case,忽略大小写,正则表达式是大小写敏感的。

let str = "He is a boy. Is he?";

console.log(str.replace(/\bis\b/gi, "0"));

m:multiple lines,多行搜索,搜索时识别换行符。

元字符

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

原义文本字符,如:aabc 等。

元字符,在正则表达式中有特殊意义的非字母字符。如:\b 用于匹配单词边界。

一些特殊的符号。如:*  +  ?  $  ^  .  |  \   ( )   { }   [ ]

字符类

一般情况下,正则表达式一个字符对应字符串的一个字符。

例如:表达式 ab\t 的含义是 "ab"紧接着一个 tab(制表符)。

当需要匹配一类字符时,可以使用[ ]来构造一个简单的类。

所谓类,是指符合某些特性的对象,一个泛指,而不是特指某个字符。

例如:表达式[abc]把字符 ab归位一类,表达式可以匹配这类字符,即匹配其中之一。

let str = "a1b2c3d4";

console.log(str.replace(/[abc]/g, "x"));

字符类取反

使用元字符^创建反向类(负向类),即匹配不属于该类的字符。

例如:[^abc]表示不是字符 abc 其中之一的字符。

let str = "a1b2c3d4";

console.log(str.replace(/[^abc]/g, "x"));

范围类

需要匹配数字时,可以使用范围类。

例如:[a-z]表示从 a z 之间的任意字符,且包含 a z 本身

let str = "a1b2c3d4z0";

console.log(str.replace(/[a-z]/g, "X"));

在[ ]中可以将一些范围连续书写。

let str = "a1b2c3d4A5B6C7D8";

console.log(str.replace(/[a-zA-Z0-9]/g, "*"));

str = "2020-03-04";

console.log(str.replace(/[0-9-]/g, "0"));

预定义类

正则表达式还提供了一些预定义类,用于快捷的表示一些特定的范围。

 .(点)[^\r\n],除了回车符和换行符之外的所有字符。

 \d,[0-9],数字字符

 \D,[^0-9],非数字字符

 \s,[\t\n\x0B\f\r],空白符,\f 换页符,\r 回车符,\t 水平制表符,\n 换行符,\x0b 垂直制表符-

 \S,[^\t\n\x0b\f\r],非空白符

 \w,[a-zA-Z_0-9],单词字符(包括字母、数字和下划线)

 \W,[^a-za-z_0-9],非单词字符(除字母、数字和下划线之外的字符)

例如:ab\d.表示匹配一个"ab+一个数字+一个任意字符"的模式。

量词

匹配字符连续出现 n 次的字符串。

?,出现 0 次或 1

+,出现 1 次或多次

*,出现 0 次或多次

{n},出现 n

{n, m},出现 n m

{n,},出现 n 次或更多次

贪婪模式

默认情况下,正则表达式会尽可能多的匹配

非贪婪模式

与贪婪模式相反,即尽可能少的匹配,一旦成功匹配就不再继续尝试其他的可能性。在模式后面加上?

分组

例如: Byron{3}表示对 n 匹配 3 次,而不是 Byron。如果要对 Byron 匹配三次,就需要对其进行分组

反向引用

使用$n的形式引用模式中分组匹配到的文本,n为索引,从1开始

忽略分组

当不想捕获分组时,可以使用?

前瞻

正则表达式从文本头部向尾部开始解析,文本尾部方向,称为“前”。

前瞻,在正则表达式匹配到规则的时候,向前检查是否符合断言。符合和不符合特定断言称为“肯定/正向”和“否定/负向”匹配。

正向前瞻,exp(?=assert)

负向前瞻,exp(?!assert)

exp assert 都是正则表达式,匹配到 exp 时还要判断 assert 是否符合,如果符合才会被匹配

JS中的正则表达式

RegExp对象属性

global,是否全文搜索,默认 false

ignoreCase,是否忽略大小写,默认 false

multiline,是否多行搜索,默认 false

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

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

RegExp对象方法

test(str),用于测试字符串参数中是否存在匹配正则表达式模式的字符串,返回 true false

exec(str),使用正则表达式模式对字符串执行搜索,并将更新全部 RegExp 对象的属性以反映匹配结果。

如果没有匹配的文本则返回 null,否则会返回一个结果“数组”对象:

[匹配到的文本, 与第 1 个分组相匹配的文本,与第 n 个分组相匹配的文本...]

index,声明匹配文本的第一个字符的位置

input,存放被检索的字符串 string

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值