2021-04-19

正则表达式

正则表达式两种创建方法:字面量和构造函数。
字面量:

let reg = /\bis\b/g;
let str = "He is a boy. This is a dog. Where is she?";
console.log(str.replace(reg,"IS"));

输出:He IS a boy. This IS a dog. Where IS she?

修饰符
g:global,全文搜索。若不添加,则搜索到第一个匹配即停止。
i:ignore case,忽略大小写,正则表达式对大小写敏感的
m:,多行搜索,搜索时识别换行符。

字符类取反
使用元字符^创建反向类,及匹配不属于该类的字符。
[^abc]表示除了abc都能匹配。

范围类
[a-z]表示a到z任意的字符。

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

输出:**************

预定义类
.(点),[^\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],非单词字符(除字母、数字和下划线之外的字符)

边界
正则表达式还提供了匹配边界的字符。
^,以 xxx 开始
$,以 xxx 结束
\b,单词边界
\B,非单词边界

let str = `@123
 @456
 @789`
 console.log(str.replace(/^@\d/gm,"X"))

输出:X23
X56
X89

量词
匹配字符连续出现 n 次的字符串。
?,出现 0 次或 1 次
+,出现 1 次或多次
*,出现 0 次或多次
{n},出现 n 次
{n, m},出现 n 到 m 次
{n,},出现 n 次或更多次

贪婪模式
例如:\d{3,6}匹配"12345678"的结果是什么?默认情况下,正则表达式会尽可能多的匹配,即采用 6 次来匹配。

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

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

console.log("a1b2c3d4".replace(/[a-z]\d{3}/g, "X"));
console.log("a1b2c3d4".replace(/([a-z]\d){3}/g, "X"));

反向引用
使用$n的形式引用模式中分组匹配到的文本,n为索引,从1开始。
例如:把 2020-03-04 替换成 03/04/2020。

console.log("2020-03-04" 
.replace(/(\d{4})-(\d{2})-(\d{2})/g, "$2/$3/$1"));

忽略分组
当不想捕获分组时,可以使用?:。
例如:(?:Byron).(ok)就会忽略对第一个分组的捕获。

console.log("2020-03-04" .replace(/(\d{4})-(\d{2})-(?:\d{2})/g, "$2/$3/$1"));

前瞻
分为正向前瞻和负向前瞻。
正则表达式从文本头部向尾部开始解析,文本尾部方向,称为“前”。
前瞻,在正则表达式匹配到规则的时候,向前检查是否符合断言。符合和不符合特定断言称为“肯定/正向”和“否定/负向”匹配。
前瞻:正向前瞻:exp(?=a)
负向前瞻:exp(?!a)

console.log("a2*34V8".replace(/\w(?=\d)/g,"x"))
console.log("a2*34V8".replace(/\w(?!\d)/g,"x"))

输出: x2x4x8
ax
3xVx

RegExp对象属性
global,是否全文搜索,默认 false。
ignoreCase,是否忽略大小写,默认 false。
multiline,是否多行搜索,默认 false。
lastIndex,当前表达式匹配内容的最后一个字符的下一个位置。
source,正则表达式的文本字符串。

let reg1 = /\w/;
let reg2 = /\w/gim;
console.log(reg1.global);
console.log(reg1.ignoreCase);
console.log(reg1.multiline);
console.log(reg2.global);
console.log(reg2.ignoreCase);
console.log(reg2.multiline);
//以上三个属性都是只读的。
console.log(reg2.source);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值