JavaScript正则需要注意的地方
栏目: JavaScript · 发布时间: 6年前
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学习总结)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Iterative Methods for Sparse Linear Systems, Second Edition
Yousef Saad / Society for Industrial and Applied Mathematics / 2003-04-30 / USD 102.00
Tremendous progress has been made in the scientific and engineering disciplines regarding the use of iterative methods for linear systems. The size and complexity of linear and nonlinear systems arisi......一起来看看 《Iterative Methods for Sparse Linear Systems, Second Edition》 这本书的介绍吧!