Regular Expression基础解析正则表达式

第一个“\”
这个是俗称转义字符,就是把一个字符标记为一个特殊字符或者原义字符。如:“n” 就是匹配“n” 。如果是“\n” 则是换行符。
有人该问了如果我就是想写“\”这个斜杠呢? 这个也很简单啊!就直接是这样写“\\”就可以了!为什么写两个“\\”呢!就是为了区分。

第二个“^”
这个是俗称开始字符,就是说准备写正则了!如果设置了RegExp对象的Multiline属性,^也匹配“\n”或者“\r”之后的位置。

第三个“$”
这个是俗称结束字符,也可以说成收尾(很不专业的解释)!如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。

第四个“*”
这个是匹配前面的子表达式零次或者多次。如:zo*能匹配“z”以及“zo”或者“zoo”。这个“*”也就是相当于{0,}

第五个“+”
这个是匹配前面的子表达式一次或者多次。如:“zo+”能匹配“zo”以及“zoo”或者“zooo”。这个“*”和“+”差不多一个是开始零次一个是一次。这个“+”相当于{1,}。

第六个“?”
这个是匹配前面的子表达式零次或者一次。如:“do(es)?”可以匹配“do”或者“does”。这个问号的意思就是要么匹配零次要么匹配一次!


第七个“{}”
这个符号是匹配多少次的,
1,{n}匹配确定的n次,n是一个非负整数,如:“o{2}”这个的意思就是匹配两个“oo”,如: good,food等!不过不能匹配body,因为就一个o!
2,{n,}匹配至少n次,n是个非负整数,如:“o{2,}” 这个的意思就是匹配两个以上的“oo”,如:good,goood,gooood等。“o{1,}”等价于“o+”。“o{0,}”这个等价于“o*”。
3,m}这个是最少匹配n次最多匹配m次,n和m都是非负整数,其中n<=m。例如:“o{1,3}”匹配body,food,foood。不过不匹配fooood。“o{0,1}”等价于“o?”。这里写的时候要注意一下,就是逗号和两个数之间不能有空格。

第八个“?”特殊用法
当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。所谓非贪婪就是以最少为好,非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。

第九个“.”
匹配除换行符“\n”之外的任何单个字符。如果想匹配换行符“\n”再内的任何字符,就使用“(.|\n)”的模式。

第十个“pattern”
这个“pattern”不是很好理解,刚一看比较晕!不过我对这个的理解如下希望对大家有用:
1. ?:pattern 匹配pattern但不获取匹配结果,例如:k(?:1|2|3) k在123中任意匹配一个,例子:k1|k2
2. ?=pattern 正向肯定预查 例如:K(?=1|2|3) 当K匹配123中任意一个时 选择K 例子:k1中的k或者k2中的k
3. ?!pattern 正向否定预查 例如:k(?!1|2|3) 当K不匹配123中的任意一个时 选择K 例子:不匹配k1中的k,不过可以是k4,k5
4. ?<=pattern 反向肯定预查 例如:(?<=1|2|3)k 当K匹配123中任意一个时 选择K 例子:1k中的k或者2k中的K
5. ?<!pattern 反向否定预查 例如:(?<!1|2|3)k 当k不匹配123中任意一个时 例子:不匹配1k中的K可以是4k,5k

第十一个“|”
这个符号就是或的意思,比如:“f|good”能匹配“f”或“good”,如果这样呢“(f|g)ood”则匹配“food”或“good”。

第十二个“[]”
这个符号是字符集和的意思,和“{}”看上去差不多,不过意义可就差多了。


第十三个“()”
这个符号式数组或者是集合(这样解释可能不太准确,呵呵)。

1.[xyz] 匹配所包含的任意一个字符。就是说三个之中选择一个。例子:“[abc]”可以匹配“company”中的“a”不过不可以匹配“beautiful”因为用到了里面的两个字母。
2.[^xyz] 这个是负值字符集合,也可以说成是“非”。例子:“[^abc]”可以匹配“drop”等!只要单词里没有“abc”这三个字母就可以。
3.[a-z] 字符的范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。也可以写成“[0-9]”这个是匹配0到9直接打数字。
4.[^a-z] 这个我想不用说大家就应该想到是什么意思了,对了!就是你想的那个意思:不在“a”到“z”范围内的任意字符,一开始我看到这个的时候以为是不在a到z之间的字母呢!我说如果不在a到z之间的字母那只有汉语中的“ü” 了!这个好像读“喻”!呵呵! 大家看清楚了啊!是字符,不是字母。

下面大家和我一起看看“\”和字母所匹配的特殊含义,
“\b” 这个是匹配一个单词的边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。这个我感觉比较好记大家可以这样记:边界的边是b开头的!
“\B”这个是和“\b”是相反的,匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
“\d”这个是用的比较多!我建议大家对这个多记记,这个是匹配数字字符,相当于[0-9]。
“\D”这个也很好理解,也是相反的意思就是说不是数字的,相当于[^0-9]。
“\f”这个是匹配一个换页符。这个不做过多解释了!下面的四个也就过多不做过多解释了。只要记住就可以了!在项目中会用就可以了!
“\n”这个是匹配一个换行符。
“\r”这个是匹配一个回车符。
“\t”这个是匹配一个制表符。
“\v”这个是匹配一个垂直制表符。
“\s”这个匹配任何空字符,匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。也就是这个把上面的五个都包括了!
“\S”这个是非空白字符等价于[^ \f\n\r\t\v]。
说到这里大家都可能感觉到正则其实就是这些字符嘛!而且有些是可以靠我们的逻辑思维推理出来的,而且有些是重复的,只要大家能够灵活的运用就可以了。
好的,我们继续
“\w”这个是匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。这个在实际中用的也挺多的也建议大家多记记这个。
“\W”这个是匹配非单词数字字符。等价于“[^A-Za-z0-9_]”。


好的!基本上要记得就是这么多了!这些可能有些正则高手该说了“你这个根本不全啊?” 呵呵! 我先提前解释一下吧,我所写的只是一些基础的,在项目中常见的,比较实用的,基本上这些在项目中就可以运用自如了。
接下来呢,和大家做一些实质性的东西,和大家一起解析一些正则表达式。
比如这个正则:^([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$
这个正则我想对正则高手来说一看就知道是什么了。当然一些逻辑思维比较强的看两眼也就知道这个是什么了,没错就是时间正则。

OK 我们来解析一下这个正则从这个“^”开始,“([0-1]?[0-9]|2[0-3])”是个组,“[0-1]?”这个问号的作用是0或1最多有零个或者一个,“[0-9]”0至9之间任意一个数,“|”这个是“或”的意思,就是说不是“[0-1]?[0-9]”就是“2[0-3]”,“2[0-3]” 这个是前面的2就是代表2,后面0至3是0到3之间任意一个数,“:”就是代表“:”,“([0-5][0-9])”也是个组,“[0-5]”是0到5之间任意一个数,“[0-9]”是0到9之间任意一个数,“:”也是本意,“([0-5][0-9])”也是个组,“[0-5]”是0到5之间任意一个数,“[0-9]”是0到9之间任意一个数,“$”这个是结束符。
再和大家解析一个小数
比如:^[1-9]+\d*(\.[0-9]{1,2})?|0(\.[0-9]{1,2})?$
“^”是开始符,“[1-9]+”其中“+”的意思是1到9之间最少有一个或者多个,“\d*”这个“\d”是数字,这个“*”是最少有零个数字或者有多个数字,“(\.[0-9]{1,2})?”这个组里面“\.”是原意点,“[0-9]{1,2}” 0到9之间有一个或者有两个数字,后面这个问号“?”意思是有零个或者一个它“(\.[0-9]{1,2})”。“|” 是要么是“[1-9]+\d*(\.[0-9]{1,2})?”要么是“0(\.[0-9]{1,2})?”。“0(\.[0-9]{1,2})?”这个里面的0是原意,“(\.[0-9]{1,2})”。

好了,我就不一个一个的解析了,如果我这样解析下去估计大家都该把我当成“唐僧”了。今天就和大家分享到这里,还是那就老话欢迎高手批评指点,有看法不同的请留言讨论。
下面我例举出一些常见的正则表达式来给大家说拜拜:

^[1-9]\d*$ //匹配正整数   
^-[1-9]\d*$ //匹配负整数   
^-?[1-9]\d*$ //匹配整数   
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)   
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)   
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数   
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数   
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数   
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)   
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
^[a-zA-Z][a-zA-Z0-9_]{4,15}$ //匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
^\s*|\s*$ //匹配首尾空白字符的正则表达式
\n\s*\r //匹配空白行的正则表达式
[^\x00-\xff] //匹配双字节字符(包括汉字在内)
[\u4e00-\u9fa5] //匹配中文字符的正则表达式


用户名
^[a-z0-9_-]{3,16}$

密码
^[a-z0-9_-]{6,18}$

十六进制值
^#?([a-f0-9]{6}|[a-f0-9]{3})$

电子邮箱
^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$
^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$

URL
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$

IP 地址
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)


^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

HTML 标签 ^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


jquery.validate使用攻略(表单校验) 目录 jquery.validate使用攻略1 第一章&#160;jquery.validate使用攻略1 第二章&#160;jQuery.validate.js API7 Custom selectors7 Utilities8 Validato
/\s+/g和/\s/g的区别 正则表达式/\s+/g和/\s/g,目的均是找出目标字符串中的所有空白字符,但两者到底有什么区别呢? 我们先来看下面一个例子: let name = &#39;ye wen jun&#39;;let ans = name.replace(/\s/g, &#39;&#3
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母 /^[0-9a-zA-Z]*$/g jQuery.validator.addMethod(&quot;letters&quot;, function (value, element) { return this.optio
this.optional(element)的用法 this.optional(element)是jquery.validator.js表单验证框架中的一个函数,用于表单控件的值不为空时才触发验证。 简单来说,就是当表单控件值为空的时候不会进行表单校验,此函数会返回true,表示校验通过,当表单控件
jQuery.validate 表单动态验证 实际上jQuery.validate提供了动态校验的方法。而动态拼JSON串的方式是不支持动态校验的。牺牲jQuery.validate的性能优化可以实现(jQuery.validate的性能优化见图1.2 jQuery.validate源码 )。 也可
自定义验证之这能输入数字(包括小数 负数 ) &lt;script type=&quot;text/javascript&quot;&gt; function onlyNumber(obj){ //得到第一个字符是否为负号 var t = obj.value.charAt(0); //先把非数字的都
// 引入了外部的验证规则 import { validateAccountNumber } from &quot;@/utils/validate&quot;; validator.js /*是否合法IP地址*/ export function validateIP(rule, value,cal
VUE开发--表单验证(六十三) 一、常用验证方式 vue 中表单字段验证的写法和方式有多种,常用的验证方式有3种: data 中验证 表单内容: &lt;!-- 表单 --&gt; &lt;el-form ref=&quot;rulesForm&quot; :rules=&quot;formRul
正则表达式 座机的: 例子: 座机有效写法: 0316-8418331 (010)-67433539 (010)67433539 010-67433539 (0316)-8418331 (0316)8418331 正则表达式写法 0\d{2,3}-\d{7,8}|\(?0\d{2,3}[)-]?\d
var reg = /^0\.[1-9]{0,2}$/;var linka = 0.1;console.log (reg.test (linka)); 0到1两位小数正则 ^(0\.(0[1-9]|[1-9]{1,2}|[1-9]0)$)|^1$ 不含0、0.0、0.00 // 验证是否是[1-10
input最大长度限制问题 &lt;input type=&quot;text&quot; maxlength=&quot;5&quot; /&gt; //可以 &lt;input type=&quot;number&quot; maxlength=&quot;5&quot; /&gt; //没有效
js输入验证是否为空、是否为null、是否都是空格 目录 1.截头去尾 trim 2.截头去尾 会去掉开始和结束的空格,类似于trim 3.会去掉所有的空格,包括开始,结束,中间 1.截头去尾 trim str=str.trim(); // 强烈推荐 最常用、最实用 or $.trim(str);
正则表达式语法大全 字符串.match(正则):返回符合的字符串,若不满足返回null 字符串.search(正则):返回搜索到的位置,若非一个字符,则返回第一个字母的下标,若不匹配则返回-1 字符串.replace(正则,新的字符串):找到符合正则的内容并替换 正则.test(字符串):在字符串中
正整数正则表达式正数的正则表达式(包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+\d)|0)$正数的正则表达式(不包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+
JS 正则验证 test() /*用途:检查输入手机号码是否正确输入:s:字符串返回:如果通过验证返回true,否则返回false /function checkMobile(s){var regu =/[1][3][0-9]{9}$/;var re = new RegExp(regu);if (r
请输入保留两位小数的销售价的正则: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/ 1.只能输入英文 &lt;input type=&quot;text&quot; onkeyup=&quot;value
判断价格的正则表达式 价格的正则表达式 /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/; 1 解析:价格符合两种格式 ^ [1-9]\d*(.\d{1,2})?$ : 1-9 开头,后跟是 0-9,可以跟小数点,但小数点后要带上 1-2 位小数,类似 2,2
文章浏览阅读106次。这篇文章主要介绍了最实用的正则表达式整理,比如校验邮箱的正则,号码相关,数字相关等等,本文给大家列举的比较多,需要的朋友可以参考下。_/^(?:[1-9]d*)$/ 手机号
文章浏览阅读1.2k次。4、匹配中的==、an==、== an9、i9 == "9i"和99p==请注意下面这部分的作用,它在匹配中间内容的时候排除了说明:当html字符串如下时,可以匹配到两处,表示匹配的字符串不包含and且不包含空白字符。说明:在上面的正则表达式中,_gvim正则表达式匹配不包含某个字符串
文章浏览阅读897次。【代码】正则表达式匹配a标签的href。_auto.js 正则匹配herf