第10天-JavaScript正则表达式
正则有什么用
- 给定的字符串是否符合正则表达式的过滤逻辑
- 通过正则表达式,从字符串中获取我们想要的特定部分
- 替换字符串满足正则表达式的字符
例如:验证邮箱、手机号、银行卡、采集器(爬虫)、中奖信息133*161屏蔽特殊词汇
test方法
test方法表示用正则去匹配字符串,如果匹配成功返回true,否则返回false
var reg = /aa/
console.log(reg.test('aa')) //true
console.log(reg.test('AA')) //false, 如果要忽略大小写,规则可以这样写 reg =/aa/i //判断是一个字符串是否全是数字
var str = "111addsdsds111"
// \D,只要不是数字的字符都会被\D匹配上
var reg2 = /\D/
if(reg.test(str)){
alert('不全是数字')
}else{
alert('全是数字')
}
search方法
search方法表示正则去匹配字符串,如果匹配成功就返回匹配成功等位置,如果匹配失败就返回-1
var str = 'abcde'
//需求:查询a是否在字符串str中
console.log(str.search('a')) //需求:查找a+数字(大于等于1)是否存在字符串中
var reg = /a\d+/
var str2 = 'ascda2132ve'
console.log(str2.search(reg))
match方法
match方法表示正则去匹配字符串,如果匹配成功就返回匹配成功的数组,如果匹配不成功就返回null
//match 匹配上就返回内容,匹配不上就返回null
var str = "222ddd33aa11cc"
//g 表示全局匹配, i表示忽略大小写
var reg = /\d/g
var res = str.match(reg)
console.log(res)
replace方法
replace表示正则去匹配字符串,匹配成功的字符串会被新的字符串替换
var str = "床前明月光" //注意:字符串不能被改变,只有返回一个新的字符串
var str2 = str.replace('明月', '太阳')
console.log(str, str2) //把数字替换成xxx
var str3 = "32dewfdew23w1"
var reg = /\d/g //如果不加g,只会替换第一个匹配到的数字
var res = str3.replace(reg, 'xxx')
console.log(res) //需求: 匹配上数字,每个数字加1,得到的结果是234567
var str4 = '123456'
var reg = /\d/g
//replace 第二个参数可以是一个函数, 函数执行后会有一个结果,拿这个结果去替换
var str5 = str4.replace(reg, function(s){
return Number(s) + 1
}) console.log(str5)
//敏感词过滤
//思路:把敏感词找出来 替换成**
var oText1 = document.getElementById('text1')
var oText2 = document.getElementById('text2')
var oBtn = document.getElementById('btn1')
oBtn.onclick = function(){
//金胖胖主持曹县政治局会议 研究2020年经济工作
var valueStr = oText1.value
//在正则中|表示或者的意思
var reg = /金胖胖|曹县|政治局/g
var str = valueStr.replace(reg, function(s){
var result = ''
for(var i=0; i<s.length; i++){
result += '*'
}
return result
})
oText2.value = str
}
replace应用-敏感词过滤
匹配子项
1)使用()可以进行分组操作
var str="2019-12-05"
//小括号 用来分组
var reg = /(\d+)-(\d+)-(\d+)/
var ret = str.match(reg)
console.log(ret[0]) //2019-12-05
console.log(ret[1]) //
console.log(ret[2]) //
console.log(ret[3]) //
注意: match方法,如果传入的正则使用全局匹配,那么返回的值是一个整体正则表达式匹配的结果,不会返回子项匹配的结果
var str="2019-12-05"
//小括号 用来分组
var reg = /(\d+)-(\d+)-(\d+)/g //g表示全局
var ret = str.match(reg)
console.log(ret[0]) //2019-12-05
console.log(ret[1]) //undefined
console.log(ret[2]) //undefined
console.log(ret[3]) //undefined
2) replace子项
一个()表示一个子项
第一个参数输出的内容是 正则整体匹配的结果
从第二个参数起,有多少子项,都可以打出来,参数和子项一一对应
子项打完以后再打的第一个参数就是匹配的位置
var str="2019-12-05" var reg = /(\d+)-/g
str.replace(reg, function(s0, s1, s2){
console.log(s0,s1,s2)
})
子项(子模式)有什么用?
1、当正则比较复杂的时候,可以用()进行分组,比如匹配邮箱
2、当需要使用到整体中部分内容的时候,可以用()分组,并且得到分组中的内容
中括号的作用
1)中括号表示一个整体,并且括号中的字符属于或者关系,只挑选一个出来匹配
var reg = /ab[cde]de/ var str = "abcde"
console.log(reg.test(str)) //true var str2 = "abdde"
console.log(reg.test(str2)) //true var str3 = "abede"
console.log(reg.test(str3)) //true var str4 = "abpde"
console.log(reg.test(str4)) //false
2) 中括号可以给范围
var reg = /[0-9][a-zA-Z]/ var str = "5c"
console.log(reg.test(str)) //true var str2 = "1A"
console.log(reg.test(str2)) //true var str3 = "D1"
console.log(reg.test(str3)) //false var str4 = "QQ"
console.log(reg.test(str4)) //false
3) 在[]中排除一些东西
//除了a-z以外的都能匹配上
var reg = /[^a-z]/ var str = "%"
console.log(reg.test(str)) //true var str2 = "d"
console.log(reg.test(str2)) //false
<textarea id="ipt"></textarea>
<button id="btn">提交</button> <script>
//需求:把用户输入的标签替换掉,只留下标签里面的内容
var oIpt = document.getElementById('ipt')
var oBtn = document.getElementById('btn')
oBtn.onclick = function(){
var valueStr = oIpt.value
//<div id='heboan'>hello world</div> // \用来转义,因为/在正则中有特殊意义
// "/"有些时候有,有些时候没有,*表示前一个字符出现0次或多次
// + 表示前一个字符出现一次或多次
var reg = /<\/*[a-zA-Z]+[^>]*>/g
oIpt.value = valueStr.replace(reg, '')
}
</script>
案例:替换标签
转义字符
"."表示任意字符,想匹配真正的.则需要转义,使用"'\."
var str = 'abc'
var reg = /a.c/
console.log(reg.test(str)) //true
\b表示匹配单词边界,它匹配的是一个位置,这个位置的一边是单词(可以包括字母、数字、下划线),零一边是非字母、数字、下划线或者开始位置以及结束位置,这样的条件才满足, \B和\b相反,当\b匹配不上的时候,\B可以匹配上
var str = 'today'
var reg = /to\b/
console.log(reg.test(str)) //to后面跟着day,所以不满足条件,返回false //如果str = 'to day'
var str = 'to day'
console.log(reg.test(str)) //true
"\s"空格
var str = " heboan"
var reg = /\s/
console.log(reg.test(str)) //true
"\S"非空格
var str = " "
var reg = /\S/
console.log(reg.test(str)) //false
"\d"数字
var str = "12121"
var reg = /\d/
console.log(reg.test(str)) //true
"\D"非数字
var str = "12121"
var reg = /\D/
console.log(reg.test(str)) //false
"\w"字符(字母 数字 下划线)
var str = "_23Wa8"
var reg = /\w+/
console.log(reg.test(str)) //true
"\W"非字符
var str = "%"
var reg = /\W/
console.log(reg.test(str)) //true
"\1"重复的子项
var str = "abca"
var reg = /(a)(b)(c)\1/
console.log(reg.test(str)) //true var str = "abca"
var reg = /(a)(b)(c)\2/
console.log(reg.test(str)) //false var str = "abcc"
var reg = /(a)(b)(c)\3/
console.log(reg.test(str)) //true
量词
{4,8} 最少出现4次,最多出现8次
{4,} 最少出现4次
{4} 正好出现4次
"+" 表示至少出现1次
"?" 出现0从或1次
"*" 至少出现0次{0,}
正则中默认:区分大小写,如果不区分大小写的话,在正则的最后加标识i
正则默认: 正则匹配成功就会结束,不会继续匹配,如果要全局匹配的话,在正则最后加标识g
| 表示或
其他修饰符
^ 开头
$ 结束
第10天-JavaScript正则表达式的更多相关文章
- web前端学习(四)JavaScript学习笔记部分(10)-- JavaScript正则表达式
1.JavaScript正则表达式课程概要 方便查找字符串.数字.特殊字串等等 2.正则表达式的介绍 RegExp是正则表达式的缩写 当检索某个文本时,可以使用一种模式来描述要检索的内容.RegExp ...
- 【JS】javascript 正则表达式 大全 总结
javascript 正则表达式 大全 总结 参考整理了一些javascript正则表达式 目的一:自我复习归纳总结 目的二:共享方便大家搜索 微信:wixf150 验证数字:^[0-9]*$ 验证n ...
- 理清JavaScript正则表达式--上篇
在JavaScript中,正则表达式由RegExp对象表示.RegExp对象呢,又可以通过直接量和构造函数RegExp两种方式创建,分别如下: //直接量 var re = /pattern/[g | ...
- JavaScript正则表达式下——相关方法
上篇博客JavaScript 正则表达式上——基本语法介绍了JavaScript正则表达式的语法,有了这些基本知识,可以看看正则表达式在JavaScript的应用了,在一切开始之前,看看RegExp实 ...
- 正则表达式入门教程&&经典Javascript正则表达式(share)
前言 例子: ^.+@.+\\..+$ 这样的代码曾经多次把我自己给吓退过.可能很多人也是被这样的代码给吓跑的吧.继续阅读本文将让你也可以自由应用这样的代码. 正文 教程:正则表达式30分钟入门教程 ...
- javascript正则表达式简介
javascript正则表达式 javascript正则表达式 regular expression是一个描述字符模式的对象: ECMAScript中的RegExp类表示正则表达式: String ...
- JavaScript正则表达式知识点
通过学习imooc课程<JavaScript正则表达式>http://www.imooc.com/video/12539,对视频教学内容做一个知识整理. 一个正则表达式在线工具:http: ...
- javascript 正则表达式补充
定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...
- JavaScript 正则表达式基础语法
前言 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为相当 ...
随机推荐
- 算法专题-STL篇
这篇文章着重记录c++中STL的用法.主要粗略的介绍其用法,以知识点的形式呈现其功能,不会深入源码分析其工作原理. 排序和检索. sort(a,a+n),对a[0]往后的n个元素(包括a[0])进行排 ...
- HDU 1930 CRT
也是很模板的一道题,给出一些数,分割,模数固定是4个互质的. /** @Date : 2017-09-16 23:54:51 * @FileName: HDU 1930 CRT.cpp * @Plat ...
- CF839 C 树形DP 期望
给一颗树,求从根出发路径长度的期望是多少. 树形DP 要想清楚期望的计算 /** @Date : 2017-08-12 23:09:41 * @FileName: C.cpp * @Platform: ...
- Linux下如何强制中断一个程序的执行?
CTRL + C 中断 CTRL + Z 暂时放到后台 CTRL + D 保存退出
- (转)使用Excel批量给数据添加单引号和逗号
在使用PLSQL连接oracle数据库处理数据的过程中,常用的操作是通过ID查询出数据,ID需要附上单引号,如果查询的ID为一条或者几条,我们手动添加即可,但是如果是几百条.几千条的话,就需要使用一些 ...
- web开发之Servlet 三
昨天我们学习了Servlet的运行过程和生命周期,那么今天我们学习下Servlet中非常重要的两个类:ServletConfig ServletContext 我们可以看到,与顶层Servlet主动 ...
- Impala笔记之通用命令
help help命令用于查询其它命令的用法 [quickstart.cloudera:21000] > help select; Executes a SELECT... query, fet ...
- bzoj 1072 状压DP
我们用w[i][j]来表示,i是一个二进制表示我们选取了s中的某些位,j表示这些位%d为j,w[i][j]则表示这样情况下的方案数,那么我们可以得到转移.w[i|(1<<k)][(j*10 ...
- hibernate CasCade deleted object ould be re-saved by cascade
这个问题个人认为看你用的那种方式,如果是注解式的 比如: @ManyToMany(cascade={CascadeType.MERGE,CascadeType.REFRESH,CascadeType. ...
- Java线上应用故障之CPU占用高排查与定位
最近线上频繁报警CPU空闲不足,故紧急排查后分享给大家 1.使用top命令,获取占用CPU最高的进程号 2.查看线程号对应的进程信息 命令:ps -ef|grep 22630 3.查看进程对应的线程信 ...