www.qjdy.com-奇迹赌场 > www.qjdy.com > 正则表达式

原标题:正则表达式

浏览次数:160 时间:2019-08-08

正则表明式常用用法汇总,正则表达式汇总

在没看正文在此之前,先给大家介绍下正则表明式基本概念:

正则表明式,又称正规表示法、常规表示法。(塞尔维亚(Република Србија)语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的二个概念。正则表明式使用单个字符串来陈述、相称一密密麻麻符合有个别句法则则。在重重文书编辑器里,正则表达式平常被用来搜寻、替换那几个符合有个别形式的公文。

正则表达式,有木有人像本身一样,学了好两遍却还是很懵圈,学的时候老理解了,学完了忘光了。好吧,其实还是练的相当不够,所谓温故而知新,可认为师矣,后天就随自身来复习一下那傲娇的正则表明式吧。

缘何要有正则表达式呢?其实便是因为Computer笨(那话不是本身说的),比如[email protected],大家一看正是邮箱,不过计算机不认得啊,所以大家将在用一些管理器认识的语言,来制订好法规,告诉它适合那个准绳的正是个信箱,那样计算机就会帮咱们找到相应的东西了。所以正则便是用来安装准则,来达成我们要求的局地操作的,比如登入验证啦,搜索钦命的事物啊等等,说太多都是多余,间接看正题吧。

概念正则:

1 var re = new RegExp(“a”); //RegExp对象。参数就是我们想要制定的规则。有一种情况必须用这种方式,下面会提到。
2 var re = /a/; // 简写方法 推荐使用 性能更好 不能为空 不然以为是注释 , 

正则的常用方法

1 test() :在字符串中寻觅符合正则的内容,若查找到再次来到true,反之再次来到false.

用法:正则.test(字符串)

事例:推断是不是是数字

var str = '374829348791';
var re = /D/; // D代表非数字
if( re.test(str) ){ // 返回true,代表在字符串中找到了非数字。
alert('不全是数字');
}else{
alert('全是数字');
}

正则表明式中有广大符号,代表着分化的情致,用来让我们去定义分化的平整,比方上边D,还大概有下边包车型的士那个:

s : 空格
S : 非空格
d : 数字
D : 非数字
w : 字符 ( 字母 ,数字,下划线_ )
W : 非字符例子:是还是不是有不是数字的字符

(下边会依据例子,依次讲一些常用的字符,最终再作计算。)

2 search() :在字符串搜索符合正则的剧情,搜索到就回到出现的地点(从0开端,要是同盟的不只是一个字母,那只会回去第三个假名的任务), 倘若搜索失利就赶回 -1

用法:字符串.search(正则)

在字符串中搜索复合正则的内容。忽略大小写:i——ignore(正则中默许是分别轻重缓急写的 假若不区分轻重缓急写的话,在正则的末段加标志 i )

事例:在字符串中找字母b,且不区分轻重缓急写

var str = 'abcdef';
var re = /B/i;
//var re = new RegExp('B','i'); 也可以这样写
alert( str.search(re) ); // 1

3 match() 在字符串中寻找复合准则的源委,找出成功就赶回内容,格式为数组,退步就回到null。

用法: 字符串.match(正则)

量词: 至少现身一回 匹配不明确的次数(相称就是索求查找的意思)

全局相配:g——global(正则中暗中同意,只要搜索到复合准则的剧情就能够实现搜索)

事例:找寻钦赐格式的全数数字,如下找到 123,54,33,879

var str = 'haj123sdk54hask33dkhalsd879';

var re = /d /g; // 每便相称至少一个数字 且全局相配要是否大局相称,当找到数字123,它就可以停下了。就只会弹出123.加上全局相配,就能够从上马到截止一直去搜寻符合法规的。若无加号,相配的结果正是1,2,3,5,4,3,3,879实际不是大家想要的,有了加号,每一趟相称的数字正是最少三个了。

alert( str.match(re) ); // [123,54,33,879]

4 replace() :查找符合正则的字符串,就替换来对应的字符串。重返替换后的剧情。

用法: 字符串.replace(正则,新的字符串/回调函数)(在回调函数中,第贰个参数指的是历次相称成功的字符)

| : 或的情致 。

事例:敏感词过滤,比方小编爱新加坡平则门,神武门上太阳升。------作者爱*****,****上太阳升。即首都和广渠门形成*号,

一先导大家只怕会想到那样的法子:

var str = "我爱北京天安门,天安门上太阳升。";
var re = /北京|天安门/g; // 找到北京 或者天安门 全局匹配
var str2 = str.replace(re,'*'); 
alert(str2) //我爱**,*上太阳升 
//这种只是把找到的变成了一个*,并不能几个字就对应几个*。

要想达成多少个字对应多少个*,大家能够用回调函数完成:

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

//整个经过尽管,找到新加坡,替换到了三个*,找到广安门替换来了3个*,找到德胜门替换到3个*。

replace是三个很有用的秘籍,平常会用到。

正则中的字符

():,小括号,叫做分组符。就约等于数学里面的括号。如下:

var str = '2013-6-7';
var re1 = /d- /g; // 全局匹配数字,横杠,横杠数量至少为1,匹配结果为: 3- 6-
var re1 = /(d-) /g; // 全局匹配数字,横杠,数字和横杠整体数量至少为1 3-6-
var re2 = /(d )(-)/g; // 全局匹配至少一个数字,匹配一个横杠 匹配结果:2013- 6-

并且,正则中的每三个带小括号的项,都称为这一个正则的子项。子项在一些时候极其的有用,例如大家来看多个板栗。

例子:让2013-6-7 变成 2013.6.7

var str = '2013-6-7';
var re = /(d )(-)/g;
str = str.replace(re,function($0,$1,$2){
//replace()中如果有子项, //第一个参数:$0(匹配成功后的整体结果 2013- 6-),
// 第二个参数 : $1(匹配成功的第一个分组,这里指的是d 2013, 6)
//第三个参数 : $1(匹配成功的第二个分组,这里指的是- - - ) 
return $1   '.'; //分别返回2013. 6.
});
alert( str ); //2013.6.7
//整个过程就是利用子项把2013- 6- 分别替换成了2013. 6. 最终弹出2013.6.7

match方法也会回来本身的子项,如下:

var str = 'abc';
var re = /(a)(b)(c)/;
alert( str.match(re) ); //[abc,a,b,c]( 返回的是匹配结果 以及每个子项 当match不加g的时候才可以获取到子项的集合)

[] : 表示有些会集中的率性二个,比如 [abc] 全部代表二个字符 相称 a b c 中的大肆二个,也得以是限制,[0-9] 范围必须从小到大 。

[^a] 全部代表二个字符 :^写在[]内部的话,就意味着排除的情致

事例:相称HTML标签 比方<div class="b">hahahah </div> 寻找标签<div class="b"></div>

var re = /<[^>] >/g; //相配左括号 中间起码贰个非右括号的内容(因为标签里面还应该有属性等片段事物),然后相配右括号
var re = /<[wW] >/g; //相称左括号 中间起码八个字符大概非字符的内容,然后相配右括号// 其实正是找到左括号,然后中间能够有起码贰个故事情节,一向到找到右括号就代表是三个标签。

转义字符

s : 空格
S : 非空格
d : 数字
D : 非数字
w : 字符 ( 字母 ,数字,下划线_ )
W : 非字符
.(点)——大肆字符
. : 真正的点
b : 独立的有的 ( 初阶,甘休,空格 )
B : 非独立的一部分

至于最终三个来看个栗子:

var str = 'onetwo';
var str2 ="one two";
var re = /oneb/; // e后面必须是独立的 可以是起始,空格,或结束
alert( re.test(str) ); //false
alert( re.test(str2) );//true

事例:写贰个用class名获取节点的函数:

小编们事先也许见过这么的函数:

function getByClass(parent,classname){ 
if(parent.getElementsByClassName){ 
return parent.getElementsByClassName(classname);
}
else{
var results = new Array();//用来存储所有取到的class为box的元素
var elems = parent.getElementsByTagName("*");
for(var i =0;i<elems.length;i  ){ 
if(elems[i].className==classname){ 
results.push(elems[i]);
}
}
return results; 
}
}

实在那是存在难题的,比方它假若贰个标签里面有四个class,只怕存在同样名字的class,例如<div class="box1 box1">,<div class="box1 box2>它就不可能获得到了,大家能够用正则来化解那些标题。

function getByClass(parent,classname){
if(parent.getElementsByClassName){ 
return parent.getElementsByClassName(classname);
}else{
var arr = [];
var aEle = parent.getElementsByTagName('*');
//var re = /bclassnameb/; //不能这样写,当正则需要用到参数时候,一定要用全称的写法,简写方式会把classname当做一个字符串去匹配。
var re = new RegExp('\b' classname '\b'); // 匹配的时候,classname前面必须是起始或者空格,后面也是。 默认匹配成功就停止,所以就算有重复的也不会再匹配进去了。
//需要注意的是,全称的方式声明正则的时候,参数是字符串类型的,所以我们用的时候,需要保证这些特殊的字符在字符串内也能输出才行。b本身是特殊字符,在字符串中无法输出,所以要加反斜杠转义才行。 
for(var i=0;i<aEle.length;i  ){
if( re.test(aEle[i].className) ){
arr.push( aEle[i] );
}
}
return arr;
} 
}

a 表示重复的某些子项 比如:

1 重复的率先个子项

2 重复的第4个子项

/ (a) (b) (c) 1/-----匹配 abca
/ (a) (b) (c) 2/------匹配 abcb

事例(面试题中一时问到):找重复项最多的字符个数

split():字符串中的方法,把字符串转成数组。

sort():数组中的排序方法,依照ACALL码实行排序。

join():数组中的方法,把数组调换为字符串

var str = 'assssjdssskssalsssdkjsssdss';
var arr = str.split(''); //把字符串转换为数组
str = arr.sort().join(''); //首先进行排序,这样结果会把相同的字符放在一起,然后再转换为字符串
//alert(str); // aaddjjkklsssssssssssssssss
var value = '';
var index = 0; 
var re = /(w)1 /g; //匹配字符,且重复这个字符,重复次数至少一次。
str.replace(re,function($0,$1){ 
//alert($0); 代表每次匹配成功的结果 : aa dd jj kk l sssssssssssssssss
//alert($1); 代表每次匹配成功的第一个子项,也就是w: a d j k l S 
  
if(index<$0.length){ //如果index保存的值小于$0的长度就进行下面的操作
index = $0.length; // 这样index一直保存的就在最大的长度
value = $1; //value保存的是出现最多的这个字符
}
}); 
alert('最多的字符:' value ',重复的次数:' index); // s 17

量词:代表出现的次数

{n,m}:至少出现n次,最多m次

{n,} :至少n次

* :任意次 相当于{0,}

? :零次或一遍 也就是{0,1}

:一回或自便次也正是 {1,}

{n}: 正好n次

事例:决断是或不是QQ号

//^ : 放在正则的最初阶地点,就代表起先的情趣,注意 /[^a] / 和 /^[a]/是不同的,前面一个是化解的情趣,前面一个是代表第2位。

//$ : 正则的尾声地方 , 就表示甘休的乐趣

//首先想QQ号的平整

1 第3位不能够是0

2 必须是 5-拾人的数字

var aInput = document.getElementsByTagName('input');
var re = /^[1-9]d{4,11}$/;
//123456abc为了防止出现这样的情况,所以必须限制最后
//首位是0-9,接着是4-11位的数字类型。
aInput[1].onclick = function(){
if( re.test(aInput[0].value) ){
alert('是QQ号');
}else{
alert('不是QQ号');
}
};

事例:去掉前后空格(面试题平时出现)

var str = ' hello ';
alert( '(' trim(str) ')' );//为了看出区别所以加的括号。 (hello)
function trim(str){
var re = /^s |s $/g; // |代表或者 s代表空格  至少一个 前面有至少一个空格 或者后面有至少一个空格 且全局匹配
return str.replace(re,''); //把空格替换成空
} 

常用的某些表单校验

非凡汉语:[u4e00-u9fa5] //中文ACALL码的限定

行首行尾空格:^s*|s*$ //首行出现狂妄个空格恐怕尾行出现跋扈个空格(猖獗表示也足以没有空格)

Email:^[email protected][a-z0-9] (.[a-z] ){1,3}$
//开头至少为一个字符(w字母,数字只怕下划线),然后相称@,接着为私行个字母恐怕数字,.代表真正的点,.后边为至少贰个的字符(a-z),同期那么些(比如.com)全体为三个子项作为完毕,能够出现1-3次。因为有的邮箱是如此的.cn.net。([email protected]

[email protected] [email protected] )

网址:[a-zA-z] ://[^s]* http://......

//匹配不分大小写的大肆字母,接着是//,前面是非空格的随便字符

邮编:[1-9]d{5} //开首数字不可能为0,然后是5个数字

身份证:[1-9]d{14}|[1-9]d{17}|[1-9]d{16}x

为了便利且不争论,我们得以用json的格式 组建协调的上空,如下:

/*
var re = {
email : /^[email protected][a-z0-9] (.[a-z] ){1,3}$/,
number : /d /
};
re.email
*/

上述所述是小编给大家介绍的正则表达式常用用法汇总,假使大家有别的疑问请给本人留言,作者会及时回复我们的。在此也特别多谢大家对帮客之家网址的辅助!

在没看正文在此之前,先给大家介绍下 正则表达式基本概念 : 正则表达式,又称正规表示法、常规...

本文由www.qjdy.com-奇迹赌场发布于www.qjdy.com,转载请注明出处:正则表达式

关键词: EBET视讯直播

上一篇:kvm性能优化

下一篇:没有了