正则匹配模式分为两种,一种是贪婪模式,另一种是非贪婪模式
贪婪模式:在遇到歧义时候尽可能的多的匹配符合的结果
非贪婪匹配:在遇到歧义时候匹配到一次符合的结果就不匹配了
js默认是贪婪匹配模式,贪婪模式变成非贪婪模式只需要在贪婪量词({n, }, {n, m}, + , ?, *)后面加一个?就行了
附加: 正则匹配中?的几种用法
正则匹配的前瞻就是给正则匹配的选项定义一个断言,或者说是一个条件比如:我要匹配一个字母,但是我的需求是字母后面必须是跟着一个数字的情况,那么这种场景是怎么实现了,就是用到前瞻的概念,那么我想要他的前面也要是一个数字怎么办了,这就是后顾。
前瞻后顾的描述
正则匹配新特性
以上的三个匹配形式都是不被捕获的,其中前两个是不匹配的,他只是用来当作条件来用,第三个是要被匹配的
1:任何元字符在没有写量词的情况下,只匹配一次
2:写了量词,默认是贪婪匹配
3:正则匹配一旦全部找到就不会在继续去匹配,除非你设置了全局g
4:正则匹配按照匹配规如果中间中断没有匹配到,并且字符串没有匹配完,会继续按照匹配规则重新匹配
5:(pattern)如果匹配到了很多结果,只捕获最后一次匹配到的结果
6:任何量词都只作用于前面的元字符
1:source 2:global 3:ingoreCase 4:multiline 5:lastIndex
字符串满足正则匹配规则就会返回true,但是如果正则匹配里面含有全局的话,那么多运行几遍会报错,因为正则每次匹配开始都是看lastIndex的,全局情况下lastIndex每次执行都会被改变
如果没有找到任何匹配就返回null,如果找到了则返回一个数组,exec方法返回的数组的第 0 个元素是与正则表达式相匹配的文本
第 1 个元素是 正则匹配到 的第 1 个子表达式相匹配的文本(如果有的话)
第 2 个元素是正则匹配到 的第 2 个子表达式相匹配的文本(如果有的话)
...
以此类推。
其中还有三个参数
index:表示匹配到的文本的第一个字符所在的索引位置
input: 表示被匹配的文本
groups:表示有名的分组
在全局下也是一样因为exec永远只返回第一个匹配。
如果没有找到任何匹配就返回null,如果找到了则返回一个数组,match方法返回的数组的第 0 个元素是与正则表达式相匹配的文本
第 1 个元素是 正则匹配到 的第 1 个子表达式相匹配的文本(如果有的话)
第 2 个元素是正则匹配到 的第 2 个子表达式相匹配的文本(如果有的话)
...
以此类推。
其中还有三个参数
index:表示匹配到的文本的第一个字符所在的索引位置
input: 表示被匹配的文本
groups:表示有名的分组
在非全局的情况下,这个方法和exec一模一样,但是在全局的情况下,差别很大,在全局的情况下,只会返回匹配到的结果,并且lastIndex始终为0, 如果没匹配到就返回null
该方法用来替换字符串,第一个参数是正则表达式,第二个参数可以是字符串也可以是函数
正则匹配测试工具
你好,首先问题描述其实不是很清楚,我分情况给题主作答。
// 测试字符串var str = 'Adobe InDesign、Microsoft Word 等对中文与西文(这里用「西文」来泛指用空格分词的外文)混合排版支持较好的软件,都默认增大汉字和西文的间距。InDesign 的默认设置是 1/4 的全角空格宽度(遵从 JIS),也就是约等于一个半角空格。'
一、匹配单个字母/数字
var reg = /[0-9a-z]/console.log(str.match(reg)) // 结果:["d"]
二、由一可以看出并没有匹配到大写字母
var reg = /[0-9a-z]/iconsole.log(str.match(reg)) // 结果:["A"]
三、前面都是匹配单一字符,那么要匹配所有字母和数字呢?
var reg = /[0-9a-z]/giconsole.log(str.match(reg)) // 结果:["A", "d", "o", "b", "e", "I", "n", "D", "e", "s", "i", "g", "n", "M", "i", "c", "r", "o", "s", "o", "f", "t", "W", "o", "r", "d", "I", "n", "D", "e", "s", "i", "g", "n", "1", "4", "J", "I", "S"]
四、如果不要单个字符,要完整单词匹配或字母数字组合呢?
var reg = /[0-9a-z]+/giconsole.log(str.match(reg)) // 结果:["Adobe", "InDesign", "Microsoft", "Word", "InDesign", "1", "4", "JIS"]
好了,大概能想到的情况就这么多了。
希望是你想要的答案,如有疑问可追问,望采纳~~
验证数字的正则表达式集验证数字:^[0-9]*$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n}$
验证零和非零开头的数字:^(0|[1-9][0-9]*)$
验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
验证非零的正整数:^\+?[1-9][0-9]*$
验证非零的负整数:^\-[1-9][0-9]*$
验证非负整数(正整数
+
0)
^\d+$
验证非正整数(负整数
+
0)
^((-\d+)|(0+))$
验证长度为3的字符:^.{3}$
验证由26个英文字母组成的字符串:^[A-Za-z]+$
验证由26个大写英文字母组成的字符串:^[A-Z]+$
验证由26个小写英文字母组成的字符串:^[a-z]+$
验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
验证用户密码:^[a-zA-Z]\w{5,17}$
正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
验证是否含有
^%&',=?$\"
等字符:[^%&',=?$\x22]+
验证汉字:^[\u4e00-\u9fa5],{0,}$
验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
验证身份证号(15位或18位数字):^\d{15}|\d{}18$
验证一年的12个月:^(0?[1-9]|1[0-2])$
正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$
正确格式为:01、09和1、31。
整数:^-?\d+$
非负浮点数(正浮点数
+
0):^\d+(\.\d+)?$
正浮点数
^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
非正浮点数(负浮点数
+
0)
^((-\d+(\.\d+)?)|(0+(\.0+)?))$
负浮点数
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数
^(-?\d+)(\.\d+)?$
以上所述是小编给大家介绍的JS正则表达式匹配检测各种数值类型(数字验证),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!