js之正则

本文详细介绍了JavaScript中的正则表达式,包括元字符、量词、分支与字符集、转义字符的用法,以及test(),search(),match(),replace()和exec()等正则方法的应用示例,展示了敏感词替换的场景。
摘要由CSDN通过智能技术生成

一、元字符
  • . 匹配除了换行符以外的字符
  • \w 匹配字母或者数字或者下划线
  • \W 匹配不是字母、数字、下划线
  • \d 匹配数字,相当于[0-9]
  • \D 匹配不是数字的字符
  • \s 匹配任意不可见字符,如空格、制表符,换行符等
  • \S 匹配任意可见字符
  • ^ 匹配字符串开始位置
  • $ 匹配字符串结束的位置
  • /[\W\w]/ 全集
  • /[\d\D]/ 全集
  • /[\s\S]/ 全集
二、量词
  • *重复任意次 ,相当于{0,}
  • ? 重复0次或者1次 ,相当于{0,1}
  • +重复一次或者更多次,相当于{1,}
  • {n}重复n次
  • {n,}重复n次或者大于n次
  • {n,m} 重复n到m次
三、分支与字符集
  • (a|b|c) 匹配a或者b或者c字符
  • [abc]==[a-c] 匹配abc字符
  • [abc]==[a-c] 匹配不是abc字符
四、转义字符

\转义字符 有特殊含义的字符如 . ? + { } ( ) 等有特殊含义的 /./匹配点 /+/匹配加号等

五、正则方法

定义正则

var re = new RegExp('a') //参数为我们制定的规则
var re = /a/  //简写方法
//匹配模式有三种:g(全局匹配)、i(忽略大小写)、m(多行模式)

常用方法
1、test():查找符合正则的内容,查找到返回true,反之返回false

正则.test(字符串)

2、search():在字符串中搜索符合正则的内容,搜索到就返回出现位置的下标(从0开始,如果匹配的不只是一个位置,则返回第一次的位置),搜索失败返回-1

字符串.search(正则)

3、match():在字符串中搜索符合规则的内容,搜索成功返回数组内容,失败返回null

字符串.match(正则)
var str = 'haj123sdk54hask33dkhalsd879';
var re = /\d+/g;   
   // 每次匹配至少一个数字  且全局匹配  如果不是全局匹配,当找到数字123,它就会停止了。
   // 就只会弹出123.加上全局匹配,就会从开始到结束一直去搜索符合规则的。如果没有加号,匹配的结果就是1,2,3,5,4,3,3,8,7,9并不是我们想要的,
   // 有了加号,每次匹配的数字就是至少一个了。
   console.log( str.match(re) );   // [123,54,33,879]

4、replace(): 查找符合正则的字符串,就替换成对应的字符串,返回替换后的内容。

字符串.replace(正则,新的字符串/回调函数)

使用场景:敏感词替换

var str = "我爱北京天安门,天安门上太阳升。";
var re = /北京|天安门/g;  //  找到北京 或者天安门 全局匹配
var str2 = str.replace(re, function (str) {
	console.log(str); //用来测试:函数的第一个参数代表每次搜索到的符合正则的字符,所以第一次str指的是北京 第二次str是天安门 第三次str是天安门
	var result = '';
	for (var i = 0; i < str.length; i++) {
	    result += '*';
	}
  	return result; //所以搜索到了几个字就返回几个*
});
console.log(str2)  //我爱*****,***上太阳升
//整个过程就是,找到北京,替换成了两个*,找到天安门替换成了3个*,找到天安门替换成3个*。

5、exec():和match方法一样,搜索符合规则的内容,返回数组内容

正则.exec(字符串)

匹配一次

var testStr = "now test001 test002";
var re = /test(\d+)/; //只匹配一次
var r = "";
var r = re.exec(testStr)
console.log(r);// test001  001 返回匹配结果,以及子项
console.log(r.length); //2   返回内容的长度
console.log(r.input); //now test001 test002    代表每次匹配成功的字符串
console.log(r[0]);   //test001
console.log(r[1]);  //001    代表每次匹配成功字符串中的第一个子项 (\d+)
console.log(r.index );   //  4   每次匹配成功的字符串中的第一个字符的位置

全局匹配:如果是全局匹配,可以通过while循环 找到每次匹配到的字符串,以及子项。每次匹配都接着上次的位置开始匹配

var testStr = "now test001 test002";
var re = /test(\d+)/g;
var r = ""; //匹配两次 每次匹配都接着上一次的位置开始匹配,一直匹配到最后r就为false,就停止匹配了 匹配到test001 test002
while(r = re.exec(testStr)){
 console.log(r);         //返回每次匹配成功的字符串,以及子项,分别打印 :test001 001,test002  002
 console.log(r.input);   //分别弹出:   now test001 test002    now test001 test002
 console.log(r[0]);      //代表每次匹配成功的字符串  分别打印:  test001     test002
 console.log(r[1]);      //代表每次匹配成功字符串中的第一个子项 (\d+)  分别打印:001   002
 console.log(r.index );  // 每次匹配成功的字符串中的第一个字符的位置,分别打印:4  12
 console.log(r.length);  //分别打印:2   2
}
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值