js 正则表达式 (RegExp)

本文详细介绍了正则表达式的概念、转义字符、创建方法、修饰符、字符类、量词及正向预查等,教你如何使用正则表达式进行字符串匹配、替换和处理,包括实例解析和实用技巧。

正则表达式 (RegExp)

转义字符 \ 字符串换行符 \n
正则表达式的作用:匹配特殊字符或有特殊搭配原则的字符的最佳选择

两种创建方法: 直接量 new RegExp(); 推荐使用直接量

直接量:    
let reg = /正则表达式/;

let aa = /abc/; 匹配字符串中是否有连着一切 且必须是小写的abc 
let str = 'abcd'; 
//aa.text(str); 测试方法 str中是否有符合aa表达式的字符串 返回为布尔值
new RegExp() : 
let reg = new RegExp("正则表达式",‘限定符’);

修饰符 i(忽略大小写) g(全局匹配) m(多行匹配)

let reg = /ab/m;
let str = 'ababababab';

// 调用字符串方法 match(正则表达式) 挑出所有符合正则表达式的字符串  存入数组中
str.match(reg);

//多行匹配
let reg = /^a/gm;
let str = 'abcde\na';
// 当字符串中存在换行符  m可以执行多行匹配  ^a 代表以a开头的a;

方括号(表达式)

// [abc] 查找方括号之间的任何字符
let reg = /[ab][cd][d]/g;
let str = 'abcd';



[^abc] ^ 为 非
[0-9] 查找任何从0-9的数组
[a-z] 查找任何从小写a到小写z的字符
[A-Z] 查找任何从大写A到小写Z的字符
[A-z] 查找任何从大写A到小写z的字符

let reg = /[0-9A-z][cd][d]/g;
let str = ‘abcd’;

[adbk] 查找给定集合内的任何字符
[^adgk] ^ 为 非

// (red|blue|green) 查找任何指定的选项
let reg = /(abc|bcd)[0-9]/g;  查找以abc或bcd加一个数字的字符
let str = 'bcd2';

元字符

. 查找单个字符 ,除了换行和行结束符 . === [^\r\n]
\w 查找单词字符  \w === [0-9A-z_] \W === [^\w]
\d 查找数字 \d === [0-9]   \D === [^\d]
\s 查找空白字符 (空格,\t,\r,\n,\f,\v) \S === [^\s]
//  \b 查找单词边界  \B === [^\b]
let reg  = /\bcde\b/g;  c前面是单词边界 e后面是单词边界
let str = 'abc cde fgh';
\0 查找nNUl字符
\n 查找换行符
\f 查找换页符
\r 查找回车符
\t 查找制表符 TAB
\v 垂直制表符
\uxxxx unicode码 可以匹配汉字

量词 n为量词(也就是元字符)

//  n+ 匹配任何包含至少一个n的字符串  {1,}
//  n* 匹配任何包含零个或多个n的字符串 {0,}
let reg = /\d*/;
let str = 'abc';     //匹配不出数字 *会匹配\0 也就是空字符 所以结果匹配出 '‘ ’‘ ’‘ ’‘ 四个空
//  n?   匹配任何包含零个或一个n的字符串 {0,1}
let reg = /\w?/g;
let str = 'aaa';     会匹配出 'a' 'a' 'a' '' 三a一空
//  n{X}  匹配含x个n的序列的字符串   {x}
let reg = /\w{3}/g;
let str = 'aaaaaa'   'aaa' 'aaa'
//  n{X,Y}  匹配含x到y个的n的序列的字符串  {x,y}  
let reg = /\w{3,5}/g;  贪婪匹配   能匹配五个就不匹配少的
let str = 'aaaaaaaa'   'aaaaa' 'aaa'
//  n{X,}  匹配含至少x个的n的序列的字符串 {x, }
n$  匹配以n为结尾的字符串
^n  匹配以n为开头的字符串 ^放括号里为非 放外边为以什么开头
?=n
?!n

RegExp 方法 .lastIndex .exec();lastIndex 表示当前匹配游标(光标在哪一位).exec(); 根据游标的位置,进行下一次匹配

let str = 'aaaa';
let reg = /(\w)\1\1\1/;    \1代表引用第一个表达式的值  这句就是匹配四个\w为一组

let str = 'aaaa'
let reg = /(\w)\1(\w)\2/;  \2 代表引用第二个表达式的值,这句匹配形如aabb 为一组
// 此时第一个\w和第二个\w会储存在 lastIndex类数组中

正则表达式toString方法 .mathch() 匹配字符串中的正则表达式
正则表达式toString方法 .search() 返回匹配到的正则表达式的位置 匹配不到返回-1

toString 方法 .replace()

replace(“查找”,“替换为”) replace只能替换查到的一个字符
要想替换多个,可以用正则表达式

let reg = /a/g;
let str = 'aa';
console.log(str.replace(reg,'b'));   可以匹配替换两个
let reg = /(\w)\1(\w)\2/g;
let str = 'aabb';    //替换为bbaa形式
console.log(str.replace(reg,'$2$2$1$1'));  // $为引用第几个子表达式的内容(\w) 
let reg = /(\w)\1(\w)\2/g;
let str = 'aabb';    //替换为bbaa形式
console.log(str.replace(reg,function($,$1,$2){   //第一个参数为reg ,第二个参数为第一个子表达式内容,第三个也是
    return $2 + $2 + $1 + $1;
}));
let reg = /-(\w)/g;
let str = 'the-first-name'; //转换为小驼峰式
console.log(str.replace(reg,function($,$1){
    return $1.toUpperCase();
}))

正向预查 ?=n ?!n

let str = 'abaaaaa';
let reg = /a(?=b)/g;   表示a后面跟着一个b的a   输出a

let str = 'abaaaaa';
let reg = /a(?!b)/g;    表示a后面跟着不是b的a   输出a a a a a

正则表达式为贪婪匹配 能匹配多不匹配少 非贪婪匹配在量词后面加?

let str = 'aaaaa';
let reg = /a?/g;  输出 a a a a a

原文地址:https://www.qianqianhaiou.cn/index.php/archives/81/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值