js——正则整理

1、示例

匹配网址url

function IsURL(str_url){var strRegex = "^((https|http|ftp|rtsp|mms)?://)"+ "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //ftp的user@ + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184 + "|" // 允许IP和DOMAIN(域名)+ "([0-9a-z_!~*'()-]+\.)*" // 域名- www. + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名 + "[a-z]{2,6})" // first level domain- .com or .museum + "(:[0-9]{1,4})?" // 端口- :80 + "((/?)|" // a slash isn't required if there is no file name + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; var re=new RegExp(strRegex); if (re.test(str_url)){return (true); }else{ return (false); }
}
var testUrl;
testUrl="harveyzeng.iteye.com/blog/1776991";
alert(IsURL(testUrl));
View Code

匹配手机号码

var mobile = /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})$/;
//
var mobile = /^1[34578]\d{9}$/;
View Code

匹配固话

var tel = /^([0-9]{3,4}-)?[0-9]{7,8}$/;
View Code

匹配身份证号码

var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
View Code

匹配密码

// 以字母开头,长度在6-18之间,只能包含字符、数字和下划线
var password = /^[a-zA-Z]\w{5,17}$/;
View Code

匹配一年的12个月

var month = /^(0?[1-9]|1[0-2])$/;
View Code

匹配一个月的31天

var day = /^((0?[1-9])|((1|2)[0-9])|30|31)$/;
View Code

匹配Email地址

var email = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
View Code

匹配汉字

var n = /^[\u4e00-\u9fa5],{0,}$/;
View Code

匹配html标签

var html = /<(.*)>(.*)<\/(.*)>|<(.*)\/>/;
View Code

用正则表达式限制只能输入中文

οnkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
View Code

用正则表达式限制只能输入数字和英文

οnkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
View Code

2、 可选项修饰符,可以组合使用

  • g : 全文查找
  • i :忽略大小写
  • m : 多行查找

3、正则表达式模式

表达式描述
[abc]匹配 abc 其中的一个
[^abc]匹配 除abc 之外的字符
(x|y)匹配 x 或者 y

 

4、正则表达式中的预定义类

代码等同于匹配
.IE下[^\n],其他[^\n\r]匹配除了换行和行结束符之外的单个字符
\d[0-9]匹配数字
\D[^0-9]匹配非数字字符
\b/\bc/.exec('acbc');匹配右侧边界的c匹配单词边界
\B/\Bc/.exec('bcbc') ;成功地匹配到bcbc中的c匹配非单词边界
\s[\n\r\t\f\x0B]匹配一个空白字符
\S[^\n\r\t\f\x0B]匹配一个非空白字符
\w[a-zA-Z0-9_]匹配字母数字和下划线
\W[^a-zA-Z0-9_]匹配除字母数字下划线之外的字符
\0 查找NULL字符
\n 查找换行符
\xxx 查找以八进制数 xxx 规定的字符
\xdd 查找以十六进制数 dd 规定的字符
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符

5、量词(下表量词到{n,m}之前,单个出现时皆是贪婪量词)

代码描述示例
*匹配零次或多次zo* 能匹配 “z” 以及 “zoo” 。等价于 {0,}
+匹配一次或多次'zo+' 能匹配 “zo” 以及 “zoo” ,但不能匹配 “z” 。等价于 {1,}
匹配零次或一次"do(es)?" 可以匹配 "do" 或 "does" 中的 "do" 。? 等价于 {0,1}
{n}n 是一个非负整数。匹配确定的 n 次'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o
{n,}n 是一个非负整数,至少匹配 n 次'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。 'o{1,}' 等价于 'o+' 。 'o{0,}' 则等价于 'o*'
{n,m}m 和 n 均为非负整数,其中n<=m。最少匹配n次且最多匹配m次"o{1,3}" 将匹配 "fooooood" 中的前三个 o。 'o{0,1}' 等价于 'o?' 。请注意在逗号和两个数之间不能有空格
n$匹配以n结尾的字符串 
^n匹配以n开头的字符串 
?=n匹配任何其后紧接指定字符串n的字符串(?=pattern)所谓正向预查,意思就是:要匹配的字符串,后面必须紧跟着pattern。我们知道正则表达式/cainiao/会匹配cainiao。同样,也会匹配cainiao9中的cainiao。但是我们可能希望,cainiao只能匹配cainiao8中的cainiao。这时候就可以像下面这样写:/cainiao(?=8)/
?!n匹配任何其后没有紧接指定字符串n的字符串 

6、 贪婪量词与惰性量词

  • 贪婪量词进行匹配时,它首先会将整个字符串当成一个匹配,如果匹配的话就退出。如果不匹配,就把最后一个字符去掉再进行匹配,不匹配继续去掉最后一个字符,直到找到一个匹配或者不剩任何字符为止
  • 惰性量词进行匹配时,先看第一个字符串是否匹配,如果不匹配就加入第二个字符串以此类推,直到找到一个匹配或者不剩任何字符为止
// 惰性量词仅仅在贪婪量词后面加个"?"而已,如"a+"是贪婪匹配的,"a+?"则是惰性的 
var str = "abc";
var re = /\w+/; // 将匹配abc
re = /\w+?/; // 将匹配a
View Code

7、分组与非捕获性分组

re = /abc{2}/;//将匹配abcc  re = /(abc){2}/;//将匹配abcabc  //上面的分组都是捕获性分组  str = "abcabc ###";  arr = re.exec(str);  alert(arr[1]);//abc  //非捕获性分组 (?:)  re = /(?:abc){2}/;  arr = re.exec(str);  alert(arr[1]);//undefined  
View Code

8、反向引用

当包含分组的正则表达式进行过test,match,search这些方法之后,每个分组都被放在一个特殊的地方以备将来使用,这些存储是分组中的特殊值,我们称之为反向引用

var re = /(A?(B?(C?)))/;  
/*上面的正则表达式将依次产生三个分组 
(A?(B?(C?))) 最外面的 
(B?(C?)) 
(C?)*/  
str = "ABC";  
re.test(str);//反向引用被存储在RegExp对象的静态属性1-9中  
alert(RegExp.$1+"\n"+RegExp.$2+"\n"+RegExp.$3);  
//反向引用也可以在正则表达式中使用\1 ,\2...这类的形式使用  
re = /\d+(\D)\d+\1\d+/;  
str = "2008-1-1";  
alert(re.test(str));//true  
str = "2008-4_3";  
alert(re.test(str));//false // 使用反向引用可以要求字符串中某几个位置上的字符必须相同.另外,在replace这类方法中可用特殊字符序列来表示反向引用 
re = /(\d)\s(\d)/;  
str = "1234 5678";  
alert(str.replace(re,"21"));//在这个里面1表示第一个分组1234,2则表示5678  
View Code

9、正向前瞻

正向前瞻,用来捕获出现在特定字符之前的字符,只有当字符后面跟着某个特定字符才去捕获它。与正向前瞻对应的有负向前瞻,它用匹配只有当字符后面不跟着某个特定字符时才去匹配它。在执行前瞻和负向前瞻之类的运算时,正则表达式引擎会留意字符串后面的部分,然而却不移动index

 //正向前瞻  re = /([a-z]+(?=\d))/i;  //我们要匹配后面跟一个数字的单词,然后将单词返回,而不要返回数字  str = "abc every1 abc";  alert(re.test(str));//true  alert(RegExp.$1);//every  alert(re.lastIndex);//使用前瞻的好处是,前瞻的内容(?=\d)并不会当成一次匹配,下次匹配仍从它开始  //负向前瞻(?!)  re = /([a-z](?!\d))/;i  //将匹配后面不包含数字的字母,并且不会返回(?!\d)中的内容  str = "abc1 one";  alert(re.test(str));  alert(RegExp.$1);//one  
View Code

10、正则表达式对象的方法

match: 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回

stringObj.match(rgExp)
// 如果match的表达式匹配了全局标记g将出现所有匹配项,而不用循环,但所有匹配中不会包含子匹配项
View Code

exec: 用正则表达式模式在字符串中运行查找,并返回包含该查找结果的第一个值(数组),如果匹配失败,返回null
test: 返回一个Boolean值,它指出在被查找的字符串中是否匹配给出的正则表达式。
search: 返回与正则表达式查找内容匹配的第一个子字符串的位置(偏移位),如果没有返回-1
replace: 返回根据正则表达式进行文字替换后的字符串的复制

// 语法:
stringObj.replace(rgExp, replaceText)
// 示例
function f2c(s) {var test = /([\d]{4})-([\d]{1,2})-([\d]{1,2})/;return(s.replace(test,  function($0,$1,$2,$3) {return($2 +"/" + $1);}));
}
document.write(f2c("today: 2011-03-29")); 
// 输出:today: 03/2011
View Code

split: 将一个字符串分割为子字符串,然后将结果作为字符串数组返回
compile: 用于在脚本执行过程中编译正则表达式;也可用于改变和重新编译正则表达式

// 语法
stringObj.compile(rgExp,可选项修饰符(见2))
// 示例
var str="Every man in the world! Every woman on earth!";patt=/man/g;
str2=str.replace(patt,"person");
document.write(str2+"<br />");patt=/(wo)?man/g;
patt.compile(patt);
str2=str.replace(patt,"person");
document.write(str2);/* 输出:
Every person in the world! Every woperson on earth!
Every person in the world! Every person on earth!
*/
View Code

11、 正则表达式对象的属性

source: 返回正则表达式模式的文本的复本,只读

var re = /[a-z]/i;  
alert(re.source);//将[a-z]字符串输出  
//请注意,直接alert(re)会将正则表达式连同前向斜线与标志输出,这是re.toString方法定义的 
View Code

lastindex: 返回字符位置,它是被查找字符串中下一次成功匹配的开始位置,默认值是-1

 var re = /[A-Z]/;  //exec方法执行后,修改了re的lastIndex属性,  var str = "Hello,World!!!";  var arr = re.exec(str);  alert(re.lastIndex);//0,因为没有设置全局标志  re = /[A-Z]/g;  arr = re.exec(str);  alert(re.lastIndex);//1  arr = re.exec(str);  alert(re.lastIndex);//7 
View Code

1-9: 返回九个在模式匹配期间找到的、最近保存的部分。只读。
input($_):返回执行规范表述查找的字符串。只读

//input 最后用于匹配的字符串(传递给test,exec方法的字符串)  
var re = /[A-Z]/;  
var str = "Hello,World!!!";  
var arr = re.exec(str);  
alert(RegExp.input);//Hello,World!!!  
re.exec("tempstr");  
alert(RegExp.input);//仍然是Hello,World!!!,因为tempstr不匹配  
View Code

lastMatch($&): 返回任何正则表达式搜索过程的最后匹配的字符。只读

//lastMatch 最后匹配的字符  
re = /[a-z]/g;  
str = "hi";  
re.test(str);  
alert(RegExp.lastMatch);//h  
re.test(str);  
alert(RegExp["$&"]);//i  ,$&是lastMatch的短名字,但它不是合法变量名
View Code

lastParen($+): 如果有的话,返回任何正则表达式查找过程中最后包括的子匹配。只读

//lastParen 最后匹配的分组  
re = /[a-z](\d+)/gi;  
str = "Class1 Class2 Class3";  
re.test(str);  
alert(RegExp.lastParen);//1  
re.test(str);  
alert(RegExp["$+"]);//2 
View Code

leftContext($`): 返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符。只读
rightContext($''): 返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。只读

//leftContext  返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符  
//rigthContext 返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符  
re = /[A-Z]/g;  
str = "123ABC456";  
re.test(str);  
alert(RegExp.leftContext);//123  
alert(RegExp.rightContext);//BC456  
re.test(str);  
alert(RegExp["$`"]);//123A  
alert(RegExp["$'"]);//C456  
View Code

multiline($*): 属性返回正则表达式是否使用多行模式。这个属性不针对某个正则表达式实例,而是针对所有正则表达式

//因为IE,Opera不支持这个属性,所以最好还是单独指定
var re = /\w+/m;  
alert(re.multiline);  
alert(RegExp["$*"]);//RegExp对象的静态属性不会因为给RegExp某个对象实例指定了m标志而改变  
RegExp.multiline = true;//这将打开所有正则表达式实例的多行匹配模式  
alert(RegExp.multiline);
View Code

使用元字符注意事项: 元字符是正则表达式的一部分,当要匹配正则表达式本身时,必须对这些元字符转义
所有元字符: () [] {} \ ^ $ | ? * + .

var str = "?";
var re = /?/;
alert(re.test(str)); 出错,因为?是元字符,必须转义
re = /\?/;
alert(re.test(str)); // true
View Code

参考:
http://www.cnblogs.com/zfc2201/archive/2012/12/18/2824107.html
http://www.jb51.net/article/28007.htm
http://www.cnblogs.com/aaronjs/archive/2012/06/30/2570970.html

 

转载于:https://www.cnblogs.com/ywang/p/7815681.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天价!一款芯片从设计到流片需要45亿!3纳米芯片研发成本曝光

来源&#xff1a;EETOP综合整理自IBS、科技新报英特尔宣布7纳米制程要延后半年问世&#xff0c;使晶圆代工龙头台积电有机会受惠英特尔扩大外包生产&#xff0c;竞争对手AMD 也因英特尔7纳米延后&#xff0c;产品持续维持竞争优势&#xff0c;两家公司股价都大涨。只是英特尔7纳…

EUV光刻机全球出货量达57台

来源&#xff1a;内容编译自「semiwiki」&#xff0c;谢谢。IMEC是推动半导体技术前进的主要组织之一&#xff0c;日前&#xff0c;他们举办了一场线上论坛&#xff0c;谈及了对芯片现状和未来的看法。在演讲中&#xff0c;ASML总裁则对光刻的发展进行了演讲。从他的PPT中可以看…

一个计算机台式机的组装方案,既能带又便宜的电脑组装方案,华擎deskmini310组装晒单...

既能带又便宜的电脑组装方案&#xff0c;华擎deskmini310组装晒单2019-04-17 10:39:4425点赞61收藏30评论前段时间家中的台式机陆陆续续已近阳寿&#xff0c;再组装一台机器的念头就油然而生。常年浏览大妈家的我发现了一样小众但蛮出名的迷你机箱——华擎deskmini310&#xff…

FPGA的历史、现状和未来

来源&#xff1a;AI前线作者&#xff1a;Oskar Mencer 等译者&#xff1a;盖磊策划&#xff1a;陈思FPGA 自上世纪 80 年代进入市场以来&#xff0c;就与通用 CPU、ASIC 乃至 GPU 竞争共存。FPGA 的低功耗、可编程、规格适中等特性&#xff0c;使其在市场中占据一席之地。本文分…

模型性能评估-混淆矩阵简介

混淆矩阵 Positive - 正例Negative (N) - 负例 结果: 预测为正类别 预测为负类别 真实为正类别 True Positive (TP) False Negative (FN) 真实为负类别 False Positive (FP) True Negative (TN)TP - 预测 P, 实际 P, 模型预测正确FP - 预测 P, 实际 N, 模…

观点|重磅出炉!29页《业内观点:机器人行业的未来》

来源&#xff1a;硅谷浦发银行未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云脑研究计划&#xff0c;构建互联网&#xff08;城市&#xff09;云脑技术和企业…

出道即巅峰,掀起AI领域巨浪的GPT-3,被过誉了吗?

机器之心报道编辑&#xff1a;蛋酱、杜伟、小舟是时候重新审视这个「无所不能的」模型了&#xff01;GPT-3&#xff0c;「出道即巅峰」界的代表。2020 年 5 月&#xff0c;OpenAI 高调推出了一款具有 1750 亿参数的自回归语言模型「GPT-3」&#xff0c;在人工智能领域掀起了一阵…

虎贲计算机二级视频解析百度云,详解虎贲T7520:5G为什么需要全场景覆盖增强技术?...

紫光展锐近期发布了采用6nm EUV工艺的新一代5G SoC“虎贲T7520”&#xff0c; 先进的工艺、低功耗的系统设计&#xff0c;大幅提升的AI算力和多媒体影像处理能力&#xff0c;将为5G智能体验带来更好的选择。值得注意的是&#xff0c;基于第二代马卡鲁5G技术平台&#xff0c;虎贲…

“万物就只是5万亿个参数”,AI模型GPT-3让人怀疑人生

本文转自开源中国这几天轰动硅谷的 GPT-3 是什么来头&#xff1f;相信不太了解 AI 的朋友这几天也或多或少看到了一些关于 GPT-3 的重磅消息&#xff0c;甚至有媒体称其为 “继比特币之后又一个轰动全球的现象级新技术”。请注意&#xff0c;现在站在你面前的是&#xff1a;互联…

06_jQuery_内容过滤

HTML代码&#xff1a; <div>John Resig</div><div>gggg resig</div><div>Malcom John sinclai</div><div>J.ohn</div>jQuery代码&#xff1a; $(function(){$("div:contains(John)").css("text-decoration&quo…

从技术角度探讨:深度传感器行业有哪些发展机会

来源&#xff1a;仪商网以前&#xff0c;我们一直认为传统相机将3D世界转换为2D图像&#xff0c;已可以满足我们对于图像的应用&#xff0c;而2D图像中丢失的三维似乎并不重要。但随着计算机视觉&#xff08;CV&#xff09;的飞速发展以及与深度学习的结合&#xff0c;许多雄心…

计算机二级vf上机试题,计算机二级VF上机模拟题

计算机二级VF上机模拟题一、基本操作题(共4小题&#xff0c;第1和2题是7分、第3和4题是8分)在考生文件夹下完成下列操作(在"成绩管理"数据库中完成)&#xff1a;1、为"学生"表在"学号"字段上建立升序主索引&#xff0c;索引名和索引表达式均为学…

城市大脑全球标准,构建人类协同发展类脑智能支撑平台

21世纪以来&#xff0c;种种迹象表明诞生于1969年的互联网正在从网状结构向类脑模型演化。这种演化不但导致物联网、云计算、大数据、工业互联网、边缘计算、云机器人的产生&#xff0c;同时也使得谷歌大脑、百度大脑、阿里大脑、360安全大脑、腾讯超级大脑&#xff0c;城市大脑…

一场物理界和数学界永远不能停下的争论

来源&#xff1a;算法数学俱乐部数学和物理的搞笑差别一场物理界和数学界永远不能停下的争论&#xff1a; 数学系和物理系的学生有什么差别&#xff1f;数学系的学生学数学分析、复分析、实分析、泛函分析、数值分析、线性代数、抽象代数、概率论、集合论、数论、微分几何、微分…

Nature:麻省理工人造「巨型原子」问世,量子处理和量子通信合二为一

文章来源&#xff1a;nature在量子计算中&#xff0c;交互就是一切。量子计算机的主要挑战之一&#xff0c;就是如何让稍远距离的量子比特也能交互。一项发表于《自然》上的论文有了新的进展。一直以来&#xff0c;量子计算机都是一个神秘且「高大上」的存在。中国科学院院士潘…

神经网络与推荐系统初步简介

作者&#xff1a;一人 1.深度神经网络对于任何领域都是适用的 深度神经网络&#xff08;Deep Neural Networks, DNN&#xff09;在过去的数年已经在图像分类、语音识别、自然语言处理中取得了突破性的进展。在实践中的应用已经证明了它可以作为对于一种十分有效的技术手段应用…

18个顶级人工智能平台

来源&#xff1a;机器人小妹很多时候企业拥有重复&#xff0c;乏味且困难的工作流程&#xff0c;这些流程往往会减慢生产速度并增加运营成本。为了降低生产成本&#xff0c;企业别无选择&#xff0c;只能自动化某些功能以降低生产成本。通过数字化重复性任务&#xff0c;企业可…

计算机内部程序代码,计算机为什么能够读懂程序代码?

01 引子上一回&#xff0c;我们的主人公小A初次亮相&#xff0c;凭借基础的前后端理解&#xff0c;从技术实现的层面为我们剖析了微信扫码登录的原理和机制。可能很多人因此会好奇&#xff0c;小A到底是做什么的呢&#xff1f;为什么能够弄懂这些原理呢&#xff1f;其实&#x…

符号主义对深度学习的意义浅谈

来源&#xff1a;混沌巡洋舰符号主义人工智能经历过古典时期的专家系统阶段&#xff0c; 中期的知识图谱阶段&#xff0c; 和近期深度学习和符号主义的再次联姻。那么一个很重要的问题是符号主义为什么会复兴&#xff0c;它对当下的机器学习又有何意义&#xff1f;参考阅读&…

400多家单位、30余万科研人员,10多年奋斗!北斗卫星核心器件实现100%国产!(附:北斗研发建设历程​)...

来源&#xff1a;EETOP国务院新闻办公室8月3日上午10时举行新闻发布会&#xff0c;中国卫星导航系统管理办公室主任、北斗卫星导航系统新闻发言人冉承其介绍&#xff0c;工程建设提前半年完成&#xff0c;彰显中国速度。“北斗三号2009年11月启动建设。10余年来&#xff0c;工程…