本文实例总结了JS经典正则表达式笔试题。分享给大家供大家参考,具体如下:

一.复习字符串的传统操作
如何获取一个字符串中的数字字符,并按数组形式输出,如
dgfhfgh254bhku289fgdhdy675gfh
输出[254,289,675]
分析:循环用charAt()的方法获取到每一个子字符串,判断他是不是在0~9之间,是就把他扔到准备好的数组里
var str="dgfhfgh254bhku289fgdhdy675gfh";
findNum(str);
function findNum(){
var arr=[];
for(var i=0;i<str.length;i++){
if(str.charAt(i)<='9'&&str.charAt(i)>='0'){
arr.push(str.charAt(i));
alert(arr);
}
}
}
但是这样会输出[2,5,4,2,8,9,6,7,5]和我们想要的结果有点偏差,于是我们需要一个新的空的字符串,每次碰到是数字走if,碰到字符走else,走else的时候把之前那些数字存放到新的空的字符串里,然后通过push添加到数组,然后清空字符串,一以便下次重新存放
var str="dgfhfgh254bhku289fgdhdy675";
findNum(str);
function findNum(){
var arr=[];
var result="";
for(var i=0;i<str.length;i++){
if(str.charAt(i)<='9'&&str.charAt(i)>='0'){
result+=str.charAt(i); //注意添加方向不要反了
}
else{
if(result){
arr.push(result);
result="";
}
}
}
alert(arr)
}
还有个隐患:如果最后以数字结尾,则最后不会进入else,最后几位数字会读不到,因此for循环外面再添加一遍else里面的if循环
二.什么是正则,有什么用
正则:也叫做规则,让计算机能够读懂人类的规则
*前端哪些地方用到正则?
比如注册页面输入用户名,我们给定一套规则,判断他输入的对不对
*范围?
正则都是用来操作字符串的(即不要用他去操作对象什么的)
*怎么写?
正则也是一个系统对象,跟数组、json一样,也有个写法规则
简写 var re=//; //只写两斜杠,浏览器会认为是注释,所以尽量不要给他为空,注意两斜杠之间不要有引号
全称 var re=new RegExp(); //Reg是正则的简写,Exp是表达式的简写
大部分情况用简写,只有一种情况用全称写法:正则需要传参的时候
注:全称写法用到\时,需要两个\\,否则是转义字符
三.正则表达式的常用方法
1.test
正则去匹配字符串,如果匹配成功就返回真,匹配失败就返回假
写法:正则.test(字符串)
如:
var str='abcdef'; var re=/b/; //bc一个整体也在字符串中,弹出true,但是写bd,弹出false,因为字符串中没有bd这么一个整体 alert(re.test(str));
弹出true
扩展:
检测一个字符串是不是全是数字
var str='8621t56461';
var re=//;
if(re.test(str)){
alert("不全是数字");
}
else{
alert("全是数字");
}
两斜杠之间要写什么呢?引入转义字符
\s(\S):空格(非空格)
\d(\D):数字(非数字)
\w(\W):字符(非字符) 字符包括字母、数字、下划线
2.search
正则去匹配字符串,如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回-1
search的写法:字符串.search(正则)
如:
var str="abcdef"; var re=/b/; alert(str.search(re)); //返回1 var re=/w/; //返回-1 var re=/B/; //返回-1
正则中的默认:是区分大小写的
如果要不区分大小写,在正则的最后加标识i
var re=/B/i
完整写法:
var re=new RegExp("B","i");
3.match
正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null
match的写法:字符串.match(正则)
比如上面例子要找出数字
var str="dgfhfgh254bhku289fgdhdy675"; var re=/\d/; alert(str.match(re)); //输出2
为什么后面的不找了?
正则默认:正则匹配成功就会结束,不会继续匹配
如果想要全部查找,就要加标识g(全局匹配)
var re=/\d/g; //输出2,5,4,2,8,9,6,7,5
跟我们想要的结果还是有偏差,如果要连着找到,而不是一个个分开,则需要
var re=/\d\d/g; //两个两个找 var re=/\d\d\d/g; //三个三个找
但是个数不一定时怎么找,引进量词
量词:匹配不确定的位置
+:至少出现一次
var re=/\d+/g;
就实现上面的效果了
4.replace
正则去匹配字符串,匹配成功的字符去替换新的字符串
replace的写法:字符串.replace(正则,新的字符串)
如:
var str="aaa"; var re=/a/; str=str.replace(re,"b"); alert(str); //输出baa
敏感词过滤例子
str.replace(re,"*");
但是如果有很多词要过滤,不能写成一整段,这样匹配不到,怎样把一个词一个词分开呢
|:或的意思
新的问题:所有敏感词都会替换成一颗星,怎样做到几个字几颗星呢?
replace()的第二个参数,可以是字符串,可以是回调函数
str.replace(re,function(){
return '*';
});
现在和上面那句话作用一样
回调函数的第一个参数,就是匹配成功的字符,即可以通过第一个参数的长度,来给他返回几颗星
str.replace(re,function(str){
var result='';
for(var i=0;i<str.length;i++){
result+='*';
}
return result;
});
四.正则表达式字符类
字符类:一组相似的元素(用[]表示[]的整体代表一个字符,()是分组和子项的意思)
1.任意字符
[abc]
如o[usb]t--obt、ost、out
2.范围
[a-z]、[0-9]
如id[0-9]--id0、id5
3.排除
[^a]
如o[^0-9]t--oat、o?t、o t
例子:过滤标签
过滤掉<>(如<div>、</div>、<h2 class="sfsdf">)
var re=/<[\w\W]+>/g; //中括号里是或的关系,也就是字符或非字符都有了,包括了斜杠,引号等
另一种做法: var re=/<[^>]+>/g;
五.正则表达式转义字符
.(点):任意字符 \.:真正的点
\s(\S):空格(非空格)
\d(\D):数字(非数字)
\w(\W):字符(非字符) 字符包括字母、数字、下划线
\数字:重复子项(\1:重复的第一个子项,\2:重复的第二个子项...)
var str="abca"; var re=/(a)(b)(c)\1/ ; //true,为什么不用var re=/(a)(b)(c)\a/ ;一样能匹配成功,\数字,用于不确定的子项字符 var re=/(a)(b)(c)\2/ ; //false alert(re.teat(str));
例子:找某个字符串中出现最多的字符和它一共出现多少次
var str="vbbbbhybbfhbbgbbb";
var arr=str.split("");
str=arr.sort().join("");
var value=""; //存放出现最多的字符
var index=0; //存放次数
var re=/(\w)\1+/g;
没有\1,re就是一整个排好序的字符串,有了\1就是出现过的有重复的取出来像这样bbb...,hh
str.replace(re,function($0,$1){ //$0代表整体,$1代表第一个子项
if(index<$0.length){ //$0:每一组重复的元素
index=$0.length;
value=$1;
}
})
alert('出现最多的字符是'+value+',出现次数是'+index);
\b(\B):独立的部分(非独立的部分) 独立的部分(起始、结束、空格)
如:
var str="onetwo"; var re=/\bone/; //起始位置,true var re=/one\b/; //false,要true,one和two之间加空格或者只有one alert(re.test(str));
独立部分应用举例
之前有用到用封装好的函数来获取className
function getByClass(oparent,sClass){
var aEle=oparent.getElementsByTagName("*");
var aResult=[];
var i;
for(i=0;i<aEle.length;i++){
if(aEle[i].className==sClass){
aResult.push(aEle[i]);
}
}
return aResult;
};
这个会有bug
<div class="box1"></div> <div class="box1box2"></div> <div class="box1 box2"></div>
用这个方法获取box1,只能获取到第一个
用正则来改写
function getByClass(oparent,sClass){
var aEle=oparent.getElementsByTagName("*");
var aResult=[];
var i;
var re=new RegExp('\\b'+sClass+'\\b')
for(i=0;i<aEle.length;i++){
if(re.test(aEle[i].className)){
aResult.push(aEle[i]);
}
}
return aResult;
};
六.量词
不确定的字符个数
量词:{}
{4,7} 最少出现4次,最多出现7次
{4,} 最少出现4次
{4} 正好出现4次
+是{}的简写,相当于(1,)
? 相当于{0,1} //出现0次或者1次
* 相当于{0,} //至少出现0次,可以没有
七.正则收尾
^:正则的最开始位置,表示起始的意思
$:正则的最后,表示结束的意思
例子:去掉字符串里的空格
var re=/^\s+|\s+$/g; str.replace(re,"");
例子:检测邮箱
var re=/^\w+@[a-z0-9]+(\.[a-z]+){1,3}$/;
八.前向声明和反前向声明
(?=) :前向声明
(?!):反前向声明
举例
var str="abacad"; var re=/a(?=b)/g; str=str.replace(re,"*"); alert(str);
输出:*bacad
如果改为
var re=/a(?!b)/g;
输出:ab*c*d
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools./regex/javascript
正则表达式在线生成工具:
http://tools./regex/create_reg
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript正则表达式技巧大全》、《JavaScript替换操作技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript中json操作技巧总结》、《JavaScript错误与调试技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
# JS
# 正则表达式
# 笔试题
# javascript正则表达式模糊匹配IP地址功能示例
# JS正则表达式之非捕获分组用法实例分析
# js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
# JS正则表达式修饰符global(/g)用法分析
# JS正则表达式修饰符中multiline(/m)用法分析
# JS前向后瞻正则表达式定义与用法示例
# js正则表达式实现数字每隔四位用空格分隔代码
# js正则函数match、exec、test、search、replace、split使用介绍集合
# JS正则表达式大全(整理详细且实用)
# JS利用正则配合replace替换指定字符
# js正则表达式的使用详解
# js中过滤特殊字符的正则表达式
# JavaScript正则表达式exec/g实现多次循环用法示例
# 最多
# 弹出
# 前向
# 不确定
# 有个
# 第一个
# 给他
# 下划线
# 回调
# 几颗
# 都是
# 是一个
# 操作技巧
# 就会
# 是在
# 会有
# 相关内容
# 是有
# 他是
相关文章:
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何选择高效稳定的ISP建站解决方案?
建站主机如何安装配置?新手必看操作指南
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
香港服务器选型指南:免备案配置与高效建站方案解析
如何高效完成自助建站业务培训?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
高端建站如何打造兼具美学与转化的品牌官网?
linux top下的 minerd 木马清除方法
济南专业网站制作公司,济南信息工程学校怎么样?
如何在万网自助建站中设置域名及备案?
h5在线制作网站电脑版下载,h5网页制作软件?
如何通过可视化优化提升建站效果?
如何生成腾讯云建站专用兑换码?
如何制作算命网站,怎么注册算命网站?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
音响网站制作视频教程,隆霸音响官方网站?
动图在线制作网站有哪些,滑动动图图集怎么做?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
深圳网站制作的公司有哪些,dido官方网站?
IOS倒计时设置UIButton标题title的抖动问题
建站之星免费模板:自助建站系统与智能响应式一键生成
建站主机服务器选型指南与性能优化方案解析
如何在香港服务器上快速搭建免备案网站?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
内网网站制作软件,内网的网站如何发布到外网?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
,南京靠谱的征婚网站?
建站三合一如何选?哪家性价比更高?
如何解决ASP生成WAP建站中文乱码问题?
C++时间戳转换成日期时间的步骤和示例代码
如何在云虚拟主机上快速搭建个人网站?
家庭服务器如何搭建个人网站?
C#如何使用XPathNavigator高效查询XML
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
如何基于PHP生成高效IDC网络公司建站源码?
,石家庄四十八中学官网?
建站之星如何通过成品分离优化网站效率?
平台云上自主建站:模板化设计与智能工具打造高效网站
为什么Go需要go mod文件_Go go mod文件作用说明
北京网站制作的公司有哪些,北京白云观官方网站?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
视频网站app制作软件,有什么好的视频聊天网站或者软件?
*请认真填写需求信息,我们会在24小时内与您取得联系。