正则2

实例创建与字面量创建的区别:
 1、实例创建的方式需要多转译一次,把具有特殊意思并且带\的都要多转译一次
 var reg = /\d/;
 var reg = new RegExp("\\d");

2、在字面量方式中,用"//"包起来的都是我们的元字符,有具有特殊意义的元
 字符、代表出现次数的量词元字符、代表本身意思的普通元字符,字面量方式无法识别变量,实例创建的方式可以
 var c = "w100";
 var reg = /^"+c+"$/;以"开头,出现一到多次,然后是c出现一到多次,最后以"结尾,而不是认为的字符串拼接
 var reg = new RegExp("^" + c + "$");只能包含w100的 /^w100$/

正则中还包含修饰符:i(ignoreCase 忽略大小写)、m(multiline 匹配换行)、g(global 全局匹配)
 var reg = /^[a-z]$/i;
 var reg = new RegExp("^[a-z]$", "i");
console.log(reg.test("Z"));

exec:正则捕获的方法
 1、首先拿我们的字符串与正则进行匹配,如果不匹配,捕获的结果是null
 2、只有匹配才按照我们的规则进行捕获

正则的捕获是贪婪的,默认按照匹配最长的捕获,例如:捕获的是2016而不是2如何取消正则的贪婪性:在量词元字符后面加?即可,?出现在普通元字符后面代表出现0-1次、如果出现在量词元字符后面代表取消正则的贪婪性

正则的捕获是懒惰的,默认只捕获第一个匹配到的,例如:只得到了2016但是没有获取2017,可以加一个全局的修饰符g,需要捕获几次我们就执行几次,这样就能都捕获到了
     var reg = /\d+?/g;
     var str = "beijing2016dongjing2017";
     var ary = [];
     var res = reg.exec(str);
     while (res) {
         ary.push(res[0]);第一项是捕获到的内容
         //console.log(res[0]); 2 0 1 6 2 0 1 7
         res = reg.exec(str);
     }
     console.log(ary);//"2", "0", "1", "6", "2", "0", "1", "7"]
 通过exec如果可以获取到内容的话是一个数组

例如:["2016", index: 7, input: "beijing2016dongjing2017"]
 第一项是捕获到的内容;index是捕获开始的索引;input我们捕获的那个原始的字符串

分组:用小括号包起来的就是一个分组,也是大正则中的一个小的正则
 1、改变默认优先级   x|y:x或者y
 2、可以进行分组捕获
 捕获到的是一个数组:第一项是大正则捕获的内容,接下来分别是每一个小分组捕获的内容,index是大正则捕获的开始索引
 var reg=/(\d+)([a-z]+)/;
 console.log(reg.exec("beijing2016dongjing2017"));
 var ary=["2016dongjing", "2016", "dongjing", index: 7, input: "beijing2016dongjing2017"]
 "2016dongjing" 大正则捕获的内容 ary[0]
 "2016" 第一个分组捕获的内容 ary[1]
 "dongjing" 第二个分组捕获的内容 ary[2]

不想捕获第二个分组中的内容,只需要在小括号中加?:即可
 ?: 在分组的最前面只匹配不捕获
 var reg=/(\d+)(?:[a-z]+)/;
 console.log(reg.exec("beijing2016dongjing2017"));

字符串中也有一个捕获的方法:match
 不加全局匹配符g的时候,和exec一样,大正则和分组的内容都可以捕获到,加g的时候,虽然执行一次,但是可以把所有大正则匹配的内容都捕获到了(而exec需要多次),但是math在加上g的时候不能捕获小分组中的内容
     var reg = /(\d+)/g;
     var str = "beijing2016dongjing2017";
     console.log(str.match(reg));// 结果和var reg = /\d+/g的结果一样["2016", "2017"],即不能捕获小分组中的内容;

console.log(reg.exec(str));//["2016", "2016", index: 7, input: "beijing2016dongjing2017"]

分组引用:当发现正则中的某一部分需要和另外一部分匹配的内容的一模一样才可以,这样的情况下用分组引用来解决。

var reg = /(\d+)beijing\1/;//\1就是对第一个分组的引用
 \1代表的是和第一个分组(\d+)一模一样的内容
 console.log(reg.test("2016beijing2016"));//true
 console.log(reg.test("2016beijing2017"));//false

例如:foot wood good ... 中间两个字母需要一模一样
 var reg = /^[a-zA-Z]([a-zA-Z])\1[a-zA-Z]$/;
 console.log(reg.test("foot"));

时间: 2024-10-10 16:45:27

正则2的相关文章

python学习第十五节(正则)

正则的贪婪匹配 非贪婪模式按照最小重复数取 非贪婪匹配 正则的方法 re.split 正则分割 分割次数 保留分隔符,用一个括号套住分隔符 sub 替换字符串需要三个参数,要替换的内容(正则),新内容,字符串 分开写用compile可以写一次规则然后多次匹配,好处就是方便灵活. 返回一个迭代器对象 爬虫爬豆瓣电影信息,用正则 模块 configparser功能:创建成下面类型的文件 使用方法 读操作 DEFAULT是默认信息,不需要打印,默认信息是所有段落信息的共享信息. 用上图方法判断字段是否

python基础-正则2

正则函数 Python提供re模块,包含所有正则表达式的功能 由于python的字符串本身也有\转义,所以需要注意: s = "ABC\\-001" 对应的正则表达式应为:'ABC\-001' 用python的r前缀,就不用考虑转义问题 可以使用 s = r'ABC\-001' 对应的正则表达式为:'ABC\-001' match() 判断是否匹配成功,如果匹配成功,返回一个match对象,否则返回None test = "用户输入的字符串" if re.match

C#常用的正则工具类写法

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Collections; namespace ConsoleApplication1 { /// <summary> /// 字符串正则匹配帮助类 /// </summary> public static cla

iOS 中的正则匹配(工具类)

正则表达式 正则表达式是对字符串操作的一种逻辑公式, 用事先定义好的一些特定字符.及这些特定字符的组合, 组成一个"规则字符串", 这个"规则字符串"用来表达对字符串的一种过滤逻辑, 正则表达式就是用于描述这些规则的工具, 或者说, 正则表达式就是记录文本规则的代码. 在开发中, 我们经常会有查找符合某些复杂规则的字符串的需要, 比如数据校验: 判断用户的输入是否合法(如:用户注册的时候,QQ号码,电话号码,邮箱是否符合要求) 下面让我们先来看看正则匹配常用的一些字

正则验证手机号(联通,电信,移动手机号),不包含座机号,作为会员登陆(正则验证) winform

public static class RegxCheck { /// <summary> /// 正则表达式验证是否为手机号 /// </summary> /// <param name="telNum">需要验证的手机号</param> /// <returns></returns> public static bool CheckTelNum(string telNum) { //电信手机号码正则 strin

看看你的正则行不行——正则优化一般的json字符串

json字符串很有用,有时候一些后台接口返回的信息是字符串格式的,可读性很差,这个时候要是有个可以格式化并高亮显示json串的方法那就好多了,下面看看一个正则表达式完成的json字符串的格式化与高亮显示 首先是对输入进行转换,如果是对象则转化为规范的json字符串,不是对象时,先将字符串转化为对象(防止不规范的字符串),然后再次转化为json串.其中json为输入. if (typeof json !== 'string') { json = JSON.stringify(json); } el

正则表达示

这里对正则表达示进行一定程度的总结.为避免太过纠结,这里避开一些 鸡肋 的正则用法. 更多文档参考官方文档 http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html 字符 x 字符 x \\ 反斜线字符 \t 制表符 ('\u0009') \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') \f 换页符 ('\u000C') \a 报警 (bell) 符 ('\u0007') \e 转义

js jquery版本的 金额千分位转换函数(非正则,效率极高)

没想到js里面没有 金额千分位格式化的处理函数(例:1,234.01 这样的格式),网上搜了一圈,都是使用正则的方式处理的.正则的效率不敢恭维啊,又耗费资源速度又慢(虽然处理起来会直观一些). 因此专门写了一个纯数值处理最后输出字符串个 金额千分位处理函数,并封装成jQuery函数包,处理时效率很高,可高频率的使用,直接上代码.还有min压缩版本可点击连接下载. 如果你不是jQuery环境,直接把源码拿出来,重新封装到自己的函数中能够就能用. 源码以及min包下载地址:jQuery.format

【分享】利用Apache的Htaccess Files命令限制访问文件类型,Files正则

如果你在你的模板文件夹中有很多PSD HTML模板,那么用接下来这个htaccess文件可以保护限制访问: 文件D:\WebSite\ZBPHP.COM\www\Tpl\.htaccess 全部源码如下: <Files ~ "\.(html?|tpl|psd|zip|rar)$"> Order Allow,Deny Deny from all </Files> [分享]利用Apache的Htaccess Files命令限制访问文件类型,Files正则,布布扣,b

HashMap工作原理、深入理解JVM、正则

HashMap工作原理: http://www.importnew.com/7099.html: http://blog.csdn.net/ghsau/article/details/16843543: http://blog.csdn.net/ghsau/article/details/16890151. 深入理解JVM: http://www.importnew.com/17770.html: http://www.cnblogs.com/dingyingsi/p/3760447.html.