摘要:如果你知道正则表达式模式将会改变,或者你事先不知道什么模式,而是从另一个来源获取,如用户输入,这些情况都可以使用构造函数。
为什么要使用正则表达式
正则表达式通过由普通字符和特殊字符组成的文字模板完成对字符串的校验,搜索,替换。在javascript中类似这样
/^1d{10}$/
上面的这个简单的正则用来匹配手机号
至于说正则表达式到底有什么意义,借由《精通正则表达式》里面的一句话来概括好了。
“如果罗列计算机软件领域的伟大发明,我相信绝对不会超过二十项,在这个名单当中,当然应该包括分组交换网络,Web,Lisp,哈希算法,UNIX,编译技术,关系模型,面向对象,XML这些大名鼎鼎的家伙,而正则表达式也绝对不应该被漏掉。正则表达式的生成
对很多实际工作而言,正则表达式简直是灵丹妙药,能够成百倍的提高开发效率和程序质量。”
在javascript中生成正则表达式的方式有两种
调用RegExp对象的构造函数
var reg = new RegExp("^[a-z]+[0-9]$", "gi")
其中第一个参数是匹配模式,第二个参数是可选参数(g, i, m),分别用于指定全局匹配、区分大小写的匹配和多行匹配。这种方式会在正则表达式运行时编译(runtime compilation)。如果你知道正则表达式模式将会改变,或者你事先不知道什么模式,而是从另一个来源获取,如用户输入,这些情况都可以使用构造函数。
使用正则表达式字面值,将匹配模式封闭在两个斜杠中
var reg = /^[a-z]+[0-9]$/gi
当表达式被赋值时,字面量形式提供正则表达式的编译(compilation),当正则表达式保持为常量时一般使用字面量方式。例如当你在循环中使用字面量构造一个正则表达式时,正则表达式不会在每一次迭代中都被重新编译(recompiled)
正则表达式的组成正则表达式的文字模板是有很多不同类型的字符组成的,包括:
元字符,转义字符,限定符,字符组,或结构,括号分组
字符 | 含义 |
---|---|
. | 匹配除了换行符(n)以外的所有字符 |
w | 匹配字母,数字,下划线 |
W | 匹配除了字母,数字,下划线以外的其他字符 |
d | 匹配数字 |
D | 匹配除了数字以外的其他字符 |
s | 匹配任意的空白符(f, n, r, t, v) |
S | 匹配空白符以外的任意字符 |
b | 匹配单词的开始或者结束 |
B | 匹配单词的非开始或者结束 |
^ | 匹配行首 |
$ | 匹配行尾 |
* + ? | { [ ( ) ] }^ $ . # 和 空白 这些字符都是需要转义的。例如我们要匹配{。
{限定符
字符 | 含义 |
---|---|
* | 匹配零次至多次 |
+ | 匹配一次至多次 |
? | 匹配零次或一次 |
{2,} | 至少匹配两次 |
{10} | 匹配10次 |
{{2, 8}} | 至少匹配两次之多匹配八次 |
中括号字符组用来匹配括号内的字符之一
"fasfagxfasdfyfasfz".split(/[xyz]/) //["fasfag", "fasdf", "fasf", ""]
还有一种排除性字符组
"xaxbycz".split(/[^xyz]/) //["x", "x", "y", "z"]或结构 |
例如c|d匹配或者d
/c|d/.test("af") // false /c|d/.test("ad") // true括号分组
(cd){1,} 可以匹配cdcd..等, 其中cd便是一个分组。
/(cd){1,}$/.test("cdcd") //true贪婪模式和非贪婪模式
默认情况下,所有的限定词都是贪婪模式,表示尽可能多的去捕获字符。而在限定词后增加“?”,则是非贪婪模式,表示尽可能少的去捕获字符。
"ccccccd".match(/c+/) //["ccccc"], 贪婪模式, 捕获所有 "ccccccd".match(/c+?/) //["c"], 非贪婪模式, 只捕获到第一个捕获分组
在实际应用中我们很有可能需要获取到匹配的字符串,例如我们要将字符串"万里碧空飘着朵朵白云"替换成"万里碧空没有一朵白云"
"万里碧空飘着朵朵白云".replace(/(万里碧空)飘着朵朵白云/, "$1没有一朵白云")
捕获性分组会创建反向引用,js中可以通过 $+number 或者 "反斜杠"+number" 表示法进行引用。
注意:反斜杠+number这种引用可以在正则表达式中使用,可用于匹配不同位置的相同子串,例如:
"www.bai.bai.com".replace(/([a-z]+).1/, "$1") // www.bai.com非捕获性分组
非捕获性分组,通常由一对括号加上”?:”加上子表达式组成,非捕获性分组不会创建反向引用,就好像没有括号一样。捕获性分组和无捕获性分组在搜索效率方面也没什么不同,没有哪一个比另一个更快。
/^(?:d+)/正则表达式的方法 test
检索字符串中的指定子串,返回布尔值
/^d[a-zA-Z]{3}$/.test("1aac") // trueexec
返回一个数组,数组中的第一个条目是第一个匹配
/^d[a-zA-Z]{3}$/.exec("1aac") // ["1aac"]String可以使用正则表达式的方法 search
返回子串的开始位置
"a12b2334c34".search(/d{4}/) // 4match
返回匹配到的子串
"a12b2334c34".match(/d{4}/) // ["2334"]replace
替换匹配到的子串
"a12b2334c34".replace(/d{4}/, "cccc") // "a12bccccc34"split
将字符串分割成数组
"a12b2334c34".split(/d{4}/) // ["a12b", "c34"]断言 正向先行断言 (?=exp)
代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配 exp
/f(?=234)/.test("123abcf234acd") //true负向先行断言(?!exp)
代表字符串中的一个位置,紧接该位置之后的字符序列不能匹配 exp
/f(?!234)/.test("123abcf234acd") //false常用的正则表达式 Email 地址:
^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$URl验证
[a-zA-z]+://[^s]* 或 ^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$密码验证
(?!^[0-9]+$)(?!^[A-z]+$)(?!^[^A-z0-9]+$)^[^su4e00-u9fa5]{6,16}$邮编验证
[1-9]d{5}(?!d)手机号码验证
^1d{10}$汉字验证
^[u4e00-u9fa5]{0,}$
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/82211.html
摘要:正则表达式一直是里比较难以掌握的点。在中创建正则的两种方式使用字面量这就是正则表达式的字面量语法,表示正则表达式的模式,为正则表达式的标志。字面量形式的正则表达式一般使用较多,也推荐大家尽可能使用这种形式,简洁易读,符合正常的使用习惯。 正则表达式一直是js里比较难以掌握的点。 看不懂,学不会,记不住。 每次需要用到正则的时候,都需要再去查找资料。 今天花时间把正则的知识点总结下,希望...
摘要:简言本文给出了两个密码强度的正则表达式方案,一个简单,一个更复杂和安全。要写出正确的正则表达式,先要定义表达式规则。重复在正则表达式中用来表示元素重复出现的次数。你可以根据项目需要,自己调整上述正则表达式。 简言 本文给出了两个密码强度的正则表达式方案,一个简单,一个更复杂和安全。并分别给出了两个方案的解析和测试程序。一般大家可以根据自己的项目的实际需要,自行定义自己的密码正则约定。 ...
摘要:首先推荐几个正则表达式编辑器正则表达式是一种查找以及字符串替换操作。此表所列的常用正则表达式,除个别外均未在前后加上任何限定,请根据需要,自行处理。例如对而言,则采用一对引号来确定正则表达式的边界。 这篇文章本来很早就要写的,拖了挺久的,现在整理下,供大家学习交流哈! 基本概念 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为元字符)。模式描述在搜...
阅读 882·2021-11-08 13:22
阅读 2825·2021-09-29 09:45
阅读 2791·2021-09-09 11:52
阅读 2238·2019-08-30 13:20
阅读 3723·2019-08-29 13:28
阅读 1341·2019-08-29 12:32
阅读 2686·2019-08-29 11:10
阅读 1619·2019-08-26 13:34