JavaScript正则需要注意的地方
栏目: JavaScript · 发布时间: 5年前
exec()和match()区别
-
当采用非全局匹配的时候,两个方法的返回值完全一样。
-
match和exec都只匹配一次,且都会把分组抽出来放到数组后面
(function(){ let str="antzoane"; let reg=/(a)(n)/; console.log(str.match(reg)); console.log(reg.exec(str)); })();
-
当为全局匹配的时候,match方法返回一个存放所有匹配内容的数组(无视子表达式的匹配)。
-
exex方法返回数组不会存储所有的匹配,仅存储第一个匹配到的内容(存储在数字第一个元素),第二个元素存储第一个子表达式匹配到的内容,第三个元素存储第二个子表达式匹配到的内容,以此类推
(function(){ let str="antzoane"; let reg=/a(n)/g; console.log(str.match(reg)); console.log(reg.exec(str)); //再次调用从上次的lastindex开始匹配; console.log(reg.exec(str)); })();
match()和分组匹配
var reg = /(\d{4})-(\d{2})-(\d{2})/; var dateStr = '2018-04-18'; var s=dateStr.match(reg); console.log(s)//arr[0]是匹配的结果,arr[1]是第一个()里的匹配内容,全局匹配不会返回()里的内容 var str="hello my name is ben ,this is "; var reg2=/ {1,}/g; var reg22=/( ){1,}/g//()内看成一个整体去匹配 console.log(str.match(reg2)); console.log(str.match(reg22));
replace()和分组捕获
全部匹配添加修饰
var str="0816-2323263"; var reg=/(\d+)(-)(\d+)/g; var str2=str.replace(reg,"($1)-$3");//全部匹配添加修饰 console.log(str2);//(0816)-2323263
(?<name>)与(?:exp)
var str1="123478basd-12aaaaa"; var reg1=/(\d+)([a-z]+)(\d+)(?<rename>[a-z]+)/g; var str21=str1.replace(reg1,"$1hhhhh$<rename>");//(?<name>)捕获文本到名称为name的组里 (?:exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号 console.log(str21);//123478basd-12aaaaa
匹配需要删除的部分然后置空
var str23="123478basd12asdsa"; var reg2=/[a-z]+/g; var str22=str23.replace(reg2,"");//匹配需要删除的部分然后置空 console.log(str22);//12347812
贪婪与懒惰
-
在量词后面加个问号表示懒惰,尽可能少的匹配
var str="abc8defghij7klngon8qrstwxy7"; var reg1=/8[a-zA-Z0-9]*7/; var reg2=/8[a-zA-Z0-9]*?7/; var reg3=/8[a-zA-Z0-9]+?/; var res1=str.match(reg1); var res2=str.match(reg2); var res3=str.match(reg3); console.log(res1); console.log(res2); console.log(res3);
零宽断言
- (?=exp)向前查找
- (?<=exp)向后查找
- (?!exp)匹配后面跟的不是exp的位置
- (?<!exp)匹配前面不是exp的位置
(function(){ var str="http://www.sina.com.cn "; var reg1= new RegExp(/.+(:)/g); var res1=str.match(reg1); var reg2=new RegExp(/.+(?=:)/); var res2=str.match(reg2); console.log(res1); console.log(res2); })();
(function(){ var a = "价格是123456789.6754"; var reg4= new RegExp(/(\d)(?=(\d{3})+\.)/g); console.log(a.match(reg4)); var b = a.replace(reg4, '$1,'); console.log(b) })();
(function(){ let str="ABCD01:$23.45"; let reg1=/\$[0-9.]+/g; let reg2=/(?<=\$)[0-9.]+/g; let res1=str.match(reg1); let res2=str.match(reg2); console.log(res1); console.log(res2); })();
匹配固定位数
- 匹配固定位数时,不能/[1-9]d{4,11}/这样写,这样输入15位也会从15位中成功匹配11位
- 只能用^和$匹配字符串开始和结束位置,然后再匹配中间的位数(^$不是从哪里开始匹配
function check(val) { console.log(val) var reg = /^[1-9]\d{4,8}[0-9]$/;//匹配5到10位qq号 if (!reg.test(val)) { alert("输入有误"); }else{ alert("输入正确"); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Python学习笔记(八)—使用正则获取网页中所需要的信息。
- 史上最全的PHP正则表达式(手机号需要加上177-***)
- 带答案面经分享-L1正则&L2正则
- 神经网络中的网络优化和正则化(四):正则化
- 正则表达式 – 如何使用正则表达式进行Erlang模式匹配?
- 正则表达式创建方式的区别及编写简单的正则方式(js学习总结)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据结构与算法分析
张琨、张宏、朱保平 / 人民邮电出版社 / 2016-2-1 / 45
本书共分10章,主要包括第1章绪论,第2章线性表,第3章栈和队列,第4章串,第5章数组和广义表,第6章 树和二叉树,第7章图,第8章查找,第9章内部排序,第10章算法分析。其内容模块涵盖了课堂教学、习题课教学、实验教学、自学辅导、综合训练等。立体化教材的使用在提高教学效率、增强教学效果、加大教学信息量、培养学生的应用与实践能力。 作者简介一起来看看 《数据结构与算法分析》 这本书的介绍吧!