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,一经查实,立即删除!

相关文章

html控制浏览器宽度和高度,html – 设置电子邮件和浏览器的tr和td宽度和高度

我正在制作HTML电子邮件,我想在发送之前在我的浏览器中预览它们,所以我希望它们在浏览器和电子邮件客户端中看起来类似.我已经尝试了几种方法来设置行和单元格的宽度和高度&#xff1a;TESTTEST通过HTML属性或样式属性设置高度没有成功.单元格覆盖了桌子的整个高度.编辑因为它似…

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

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

计算机科学与技术专业改革,浅析计算机科学与技术专业教学改革

【摘要】社会的不断进步带动着科学技术的快速发展&#xff0c;人们对计算机技术的关注也越来越多&#xff0c;对高校计算机科学与技术专业也提出了更高的要求。计算机科学与技术专业需要与时俱进&#xff0c;与现代技术相结合&#xff0c;改变传统的教学模式与计划才能培养出符…

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

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

配置 CentOS 7 的网络,及重命名网卡名

Centos 安装时应配置网络&#xff0c;如果当时没配置好&#xff0c;则装完系统后&#xff0c; 也可通过修改配置文件并重启网络服务进行配置。 说明&#xff1a;CentOS 7.0默认安装好之后是没有自动开启网络连接的&#xff01;cd /etc/sysconfig/network-scripts/ #进入网络…

一个计算机台式机的组装方案,既能带又便宜的电脑组装方案,华擎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;使其在市场中占据一席之地。本文分…

「mysql优化专题」详解引擎(InnoDB,MyISAM)的内存优化攻略?(9)

注意&#xff1a;以下都是在MySQL目录下的my.ini文件中改写&#xff08;技术文&#xff09;。 一、InnoDB内存优化 InnoDB用一块内存区域做I/O缓存池&#xff0c;该缓存池不仅用来缓存InnoDB的索引块&#xff0c;而且也用来缓存InnoDB的数据块。 1、innodb_log_buffer_size 决定…

学生用计算机怎么用视频,19.使用ZOOM作为上课视频、语音和屏幕分享工具,具体对学生的电脑和宽带有什么软件和硬件要求?...

设备&#xff1a;• 网络连接——宽带、Wifi或3G、4G网络。• 扬声器和麦克风——内置或外接的无线蓝牙设备。• (HD)摄像头——外接或内置。支持的系统&#xff1a;• iOS 5.0或更新的操作系统。• 能够通过前后摄像头发送和接收视频。• iPad 2、最新iPad、iPhone 3(没有前置…

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

混淆矩阵 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;云脑技术和企业…

html文本改,编辑html格式文本可改成txt格式(可以替换或更换某文本)新手

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼新的名字生活助手If Clock.Hour < 12 ThenTextWindow.WriteLine("早上好&#xff0c;测试者")ElseIf Clock.Hour < 14 ThenTextWindow.WriteLine("中午好&#xff0c;测试者")ElseIf Clock.Hour < 17…

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

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

SQuirreL SQL Client3.8 连接 HIVE2.2

在 使用 SQuirreL SQL Client3.8 连接 HIVE2.2 发生错误&#xff0c;后换用 SQuirreL SQL Client3.7 好用&#xff01; 只需要使用 hive-jdbc-2.2.0-standalone.jar 和 hadoop-common-2.8.2.jar &#xff08;本人环境 为 hadoop2.8 和 hive 2.2&#xff09; 转载于…

虎贲计算机二级视频解析百度云,详解虎贲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…

计算机应用基础王秀娟,计算机应用基础课教学内容设计分析.doc

计算机应用基础课教学内容设计分析计算机应用基础课程教学内容设计分析摘要&#xff1a;随着科技的发展和时代的不断进步&#xff0c;计算机技术的应用被高度重视&#xff0c;计算机作为提高人们的生活质量和工作效率的一种必备工具已深深融入到了人们的工作、学习和生活中&…

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

来源&#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;索引名和索引表达式均为学…