ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

js正则表达式(RegExp)总结

2021-02-16 21:04:31  阅读:684  来源: 互联网

标签:const log 匹配 正则表达式 console test RegExp js reg


文章目录

正则表达式

正则表达式是用于匹配字符串中字符组合的模式,即实现对字符串中的信息进行查找、替换和提取操作。下面是我对js中正则表达式的整理与总结。如果大家发现文章中有问题,欢迎大家在评论中指正。

1.js的RegExp对象

js通过内置对象RegExp支持正则表达式,有2种方法实例化RegExp对象:1.字面量 2.构造函数

1.1 创建RegExp对象

1.字面量

var reg = /\bare\b/g;
var str = "You are a beautiful girls. There are many boys parsue you.";
str = str.replace(reg, 'ARE');
console.log(str);
//You ARE a beautiful girls. There ARE many boys parsue you.

2.构造函数

// new RegExp("正则表达式","匹配模式");
var reg = new RegExp('\\bare\\b','g');

第1个参数:正则表达式,js中“\”本身就是特殊字符,想使用的话需要转义;

第2个参数:匹配模式。

1.2 匹配方法

  • string.match(reg) 获取匹配内容
  • string.search(reg) 匹配字符串是否有与正则匹配的字符串,有返回索引,否则-1.
  • string.replace(reg,str2) 替换
  • string.split(reg) 字符串拆分成数组
  • reg.test(string) 字符串是否匹配正则
//search
var str2 = "abc def ghi jjk";
var res2 = str2.search(/g[hjkl]i/);
console.log(res2);//8

//split
var str = "1a2b3c4d5e6f7";
var res = str.split(/[a-z]/i);
console.log(res);//["1", "2", "3", "4", "5", "6", "7"]

2.正则常见语法

2.1 匹配模式

记住常用三个:i g m

img

//1.匹配所有项,忽略大小写。
const testString = 'test Test tEsT abdskxc ioewhsnc'
const reg = new RegExp('test', 'gi');
console.log(testString.replace(reg, 'HAHA'));
//HAHA HAHA HAHA abdskxc ioewhsnc
//多行搜索,以a开头的
var reg = /^a/m;
var reg2 = /^a/;
var str = "bfdjdjk\na";
console.log(reg.test(str));//true
console.log(reg2.test(str));//false

2.2 元字符

img

s(space) d(digital) w(word)小写匹配,大写取反。

//1.匹配任意单个字符
const reg1 = /.at/gi;
const str1 = 'cat Bat mat DOG egg FAT cupcake sing';
console.log(str1.match(reg1));//["cat", "Bat", "mat", "FAT"]
//2.逻辑或 匹配满足其一即可
const reg2 = /yes|no|maybe/i;
const str2 = "Can I say No?";
console.log(reg2.test(str2));//true
//3.[]只能匹配方括号其一
const reg3 = new RegExp('[bc]at', 'gi');
const str3 = 'cat Bat mat DOG egg FAT cupcake sing';
console.log(str3.match(reg3));//["cat", "Bat"]
//4.[^]取反 排除方括号字符集合 -定义一个范围
const reg4 = /[^a-zA-z0-9_]/;
// /[^a-zA-z0-9_]/ 等价于 /[^\W]/
console.log(reg4.test('a'));//false
console.log(reg4.test('B'));//false
console.log(reg4.test('1'));//false
console.log(reg4.test('_'));//false
console.log(reg4.test('!'));//true

2.3 量词

量词表示匹配多少个目标对象,精确匹配长度使用{}。

img

// 1. * 匹配连续出现零次或多次字符
const reg1 = /hi*/gi
const str1 = 'ahiadahdisdhixc'
console.log(str1.match(reg1)) // [ 'hi', 'h', 'hi' ]
// 2. + 匹配 >=1次
const reg2 = /a+/gi;
const str2 = 'abchAbcdklasjaaa';
console.log(str2.match(reg2));//["a", "A", "a", "aaa"]
// 3. ? 0或1次
//正则表达式默认贪婪,匹配最长部分。
//?阻止贪婪模式
const greedyreg3 = /c[a-z]*t/gi;
const lazyreg3 = /c[a-z]*?t/gi;
const str3 = 'catshidtasji';
console.log(str3.match(greedyreg3));//["catshidt"]
console.log(str3.match(lazyreg3));//["cat"]
// 4. {n} 某字符重复n次 精确匹配
const reg4 = new RegExp('hi{3}', 'gi');
const str4 = 'hiiiihhhh';
const str4_2 = "hihihi";
console.log(reg4.test(str4));//true
console.log(reg4.test(str4_2));//false
// 5. {m,n} 重复x次,其中m <= x <= n
const reg5 = /hi{1,4}/;
const str5 = 'hihi';
const str5_2 = 'hadi';
console.log(reg5.test(str5)) // true
console.log(reg5.test(str5_2)) // false
// 6. {n,} >=n次
const reg6 = /hi{5,}/;
const str6 = 'hiiiiii';
const str6_2 = 'hiiiihhh';
console.log(reg6.test(str6));//true
console.log(reg6.test(str6_2));//false

2.4 边界符

边界描述
^匹配字符串开头
$匹配字符串结尾

2.5 分组

分组描述
()提前相匹配的字符串,使量词作用于分组
console.log(`ashinmdnkbdkchbjduigh`.replace(/h(inm|bj)d/g, '-')) // as-nkbdkc-uigh
const reg7 = /(abc){2}/g;
const str7 = 'abccccd,abcabcef,abcabcabc';
console.log(str7.match(reg7));//["abcabc", "abcabc"]

2.6 优先级顺序

下面从最高优先级到最低优先级列排序:

​ (1) 转义符:\

​ (2) 圆括号和方括号:(), []

​ (3) 量词: *, +, ?, {n}, {n,}, {n,m}

​ (4) 位置和顺序: ^, $

​ (5) “或”操作: |

标签:const,log,匹配,正则表达式,console,test,RegExp,js,reg
来源: https://blog.csdn.net/weixin_43786756/article/details/113828297

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有