赞
踩
密码须包含大小写字母、数字、特殊字符(!@#$%^&*_-.·)三种且只能包含这三类且每种必须包含,长度为8-20个字符。
//(?=.*\d)表示密码中必须包含数字,(?=.*[a-z]),(?=.*[A-Z])和(?=.*[*!&$%^·_#.@-])同理
var reg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[*!&$%^·_#.@-])[\da-zA-Z*!&$%^·_#.@-]{8,20}$/
中国大陆手机号
// (13[0-9])匹配以13开头的手机号码,(14[5,7]),(15[0-3,5-9]),(17[0,3,5-8]),(18[0-9]),166,同理
var reg = /^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|(19[5,8,9]))\d{8}$/
example@example.com
:这是一个符合要求的电子邮件地址,它包含了本地部分example
、域名部分example.com
和顶级域名com
。
var reg = /^[a-z0-9A-Z]+([-|_|\\.]+[a-z0-9A-Z]+)*@([a-z0-9A-Z]+[-|\\.])+[a-zA-Z]{2,5}$/
正则表达式:用来处理字符串匹配,它有一套单独的语法体系。
其由包含在斜杠之间的模式组成
,如下所示:var reg = /ab+c/
脚本加载后,正则表达式字面量就会被编译。当正则表达式保持不变时,使用此方法可以获得更好的性能。
var reg = new RegExp("ab+c")
在脚本运行过程中,用构造函数创建的正则表达式会被编译。
如果正则表达式将会改变,或者它将会从用户输入等来源中动态的产生,就需要使用构造函数来创建正则表达式。
特殊字符(元字符):在正则当中有特殊语义的字符; \ ^ $ [] [^] {} ? * + . () |
\
转义字符在非特殊字符之前的反斜杠表示下一个字符是特殊字符,不能按照字面理解。
例如,前面没有"\"
的"b"
通常匹配小写字母"b"
,即字符会被作为字面理解,无论它出现在哪里。但如果前面加了"\"
,它将不在匹配任何字符,而是表示一个字符边界。
^
匹配输入的开始如果多行标志被设置为true
,那么也匹配换行符后紧跟的位置。
例如:/^A/
并不会匹配 "an A"
中的 'A'
,但是会匹配"An E"
中的'A'
。
$
匹配输入的结束如果多行标志被设置为true
,那么也匹配换行符前的位置。
例如:/t$/
并不会匹配 "eater"
中的 't'
,但是会匹配 "eat"
中的 't'
。
[]
在固定范围内匹配一个字符,[^]
范围取反[0-9]
可以简写为\d
; [^0-9]
可以简写为\D
[0-9A-Za-z]
可以简写为\w
; [^0-9A-Za-z]
可以简写为\W
[\f\n\r\t...]
可以简写为\s
; [^\t\n\r\t...]
可以简写为\S
{}
匹配多个;修饰个数字符 | 含义 |
---|---|
{n} | n是个整数,匹配了前面一个字符刚好出现了n次 。 例如, /a{2}/ 不会匹配“candy” 中的'a' ,但是会匹配“caandy” 中所有的 a ,以及“caaandy” 中的前两个'a' 。 |
{n,} | n 是一个正整数,匹配前一个字符至少出现了 n 次。 例如, /a{2,}/ 匹配"aa" ,"aaa" ,和"aaaa" 但是不匹配"a" |
{n,m} | n 和 m 都是整数,匹配前面的字符至少 n 次,最多 m 次。如果 n 或者 m 的值是 0,这个值被忽略。 |
?
表示匹配前面的子表达式0次或者1次,等价于{0,1}
例如,/e?le?/
匹配"angel"
中的'el'
、"angle"
中的'le'
以及"oslo"
中的'l'
。
如果?
紧跟在任何量词*
、+
、?
或{}
的后面,将会使量词变为非贪婪(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。
例如,对"123abc"
使用/\d+/
将会匹配"123"
,而使用/\d+?/
则会匹配到"1"
。
*
表示匹配前面的子表达式0次或者多次,等价于{0,}
例如,/bo*/
会匹配"A ghost boooooed"
中的"boooo"
和"A bird warbled"
中的'b'
,但是在"A goat grunted"
中不会匹配任何内容。
+
表示匹配前面的子表达式1次或者多次,等价于{1,}
例如,/a+/
会匹配"candy"
中的'a'
和"caaaaaaaandy"
中所有的'a'
,但是在"cndy"
中不会匹配任何内容。
.
默认匹配除换行符之外的任何单个字符例如,/.n/
将会匹配"nay, an apple is on the tree"
中的'an'
和'on'
,但是不会匹配'nay'
。
如果s
("dotAll")
标志位被设为true
,它会匹配换行符。
()
一个正则表达式模式使用括号,将导致相应的子匹配被记住一个正则表达式模式使用括号,将导致相应的子匹配被记住。
例如,/a(b)c/可以匹配字符串"abc",并且记得"b”。
零宽:在匹配中,不占用字符,被称为零宽。
正向:字符串可以匹配pattern
。
负向:字符串可以匹配pattern
。
断言:表示一个匹配在某些条件下发生。
先行断言x(?=y)
:匹配'x'
仅仅当'x'
后面跟着'y'
.这种叫做先行断言。
后行断言(?<=y)x
:匹配'x'
仅当'x'
前面是'y'.
这种叫做后行断言。
运算符 | 描述 |
---|---|
(x) 捕获括号 | |
(?:x) 非捕获括号 | |
(?=pattern) 零宽正向先行断言 | 代表字符串中的一个位置,紧接该位置之后 的字符序列能 够匹配 pattern 。例如: 对于字符串 "a regular expression" , re(?=gular) 只会匹配regular 中的re ,而不会匹配expression 中的re 。 |
(?!pattern) 零宽负向先行断言 | 代表字符串中的一个位置,紧接该位置之后 的字符序列不能 够匹配 pattern 。例如: 对于字符串 "a regular expression" , re(?!gular) 只会匹配expression 中的re ,而不会匹配regular 中的re 。 |
(?<=pattern) 零宽正向后行断言 | 代表字符串中的一个位置,紧接该位置之前 的字符序列能 够匹配 pattern 。例如: 对于字符串 "a regular expression" , (?<=exp)re 只会匹配expression 中的re ,而不会匹配regular 中的re 。 |
(?<!pattern) 零宽负向后行断言 | 代表字符串中的一个位置,紧接该位置之前 的字符序列不能 够匹配 pattern 。例如: 对于字符串 "a regular expression" , (?<!exp)re 只会匹配regular 中的re ,而不会匹配expression 中的re |
匹配'x'
但是不记住匹配项。这种括号叫作非捕获括号,使得你能够定义与正则表达式运算符一起使用的子表达式。
表达式/foo{1,2}/
,{1,2}
将只应用于'foo'
的最后一个字符'o'
。
如果使用非捕获括号,则{1,2}
会应用于整个'foo'
单词。
x(?=y)
匹配'x'
仅仅当'x'
后面跟着'y'
.这种叫做先行断言。
例如,/Jack(?=Sprat)/
会匹配到'Jack'
仅当它后面跟着'Sprat'
。/Jack(?=Sprat|Frost)/
匹配‘Jack’
仅当它后面跟着'Sprat'
或者是‘Frost’
。但是‘Sprat’
和‘Frost’
都不是匹配结果的一部分。
(?<=y)x
匹配'x'
仅当'x'
前面是'y'.
这种叫做后行断言。
例如,/(?<=Jack)Sprat/
会匹配到' Sprat '
仅仅当它前面是' Jack '
。/(?<=Jack|Tom)Sprat/
匹配‘Sprat ’
仅仅当它前面是'Jack'
或者是‘Tom’
。但是‘Jack’
和‘Tom’
都不是匹配结果的一部分。
|
选择或者关系字符,分支;自左向右匹配,一旦匹配上,就不在回头
标志 | 描述 |
---|---|
g (global) | 全局搜索 |
i (ignore case) | 不区分大小写搜索 |
m (multipy) | 多行搜索 |
s | 允许. 匹配换行符 |
u | 使用unicode 码的模式进行匹配 |
y | 执行"粘性(sticky) "搜索,匹配从目标字符串的当前位置开始 |
运算符 | 描述 |
---|---|
\ | 转义符 |
() [] | 圆括号和方括号 |
* + ? {} | 限定符 |
^ $ | 定位点 |
| | 替换,"或"操作 |
exec()
方法用于检索字符串中的正则表达式的匹配,如果字符串中有匹配的值返回该匹配值,否则为null。
//语法 RegExpObject.exec(string)
var str="Hello world!";
//查找"Hello"
var patt=/Hello/g;
var result=patt.exec(str); //返回值:Hello
//查找 "RUNOOB"
patt=/RUNOOB/g;
result=patt.exec(str); //返回值:null
test()
方法用于检测一个字符串是否匹配某个模式,如果字符串中有匹配的值返回true,否则返回false。
//语法 RegExpObject.test(string)
var str="Hello world!";
//查找"Hello"
var patt=/Hello/g;
var result=patt.test(str); //返回值:true
//查找 "RUNOOB"
patt=/RUNOOB/g;
result=patt.test(str); //返回值:false
match()
方法一个在字符串中执行查找匹配的 String 方法。
如果搜索值为字符串,则转换为正则表达式进行匹配。
如果匹配成功则返回包含匹配项的数组,否则返回null。
// 字符串匹配
let str = "test1test2";
str.match("test1") //['test1']
// 使用正则表达式匹配
str.match(/t(e)(st(\d?))/) //['test1', index:0, input:"test1test2"]
// 正则表达式匹配使用修饰符g
str.match(/t(e)(st(\d?))/g) //['test1','test2']
补充:当match()
传入一个非全局的正则表达式时,实际上返回的数组里有两个属性:index
和input
,他们分别表示匹配到的字符串的起始位置和检索的整个字符串。
let str = "test1test2".match(/t(e)(st(\d?))/)
str.index //0
str.input //test1test2
matchAll()
方法matchAll()
方法返回一个,包含所有匹配正则表达式的结果及分组捕获的迭代器。
正则表达式必须设置为全局模式,否则抛出异常。
let str = "test1test2";
let arr = [...str.matchAll(/t(e)(st(\d?))/g)]
arr[0]; //['test1', 'e', 'st1', '1', index: 0, input: 'test1test2', length: 4]
arr[1]; //['test2', 'e', 'st2', '2', index: 5, input: 'test1test2', length: 4]
search()
方法一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,失败时返回-1。
let str = "javascript"
str.search(/script/) //4
str.search(/abc/) //-1
replace()
方法一个字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的字符串。
let str = "javascript"
//匹配成功,就会用第二个参数去替换匹配到的字符串,并返回替换后的整体字符串
str.replace(/java/, 'python') //pythonscript
//匹配不成功,返回原来的整体字符串
str.replace(/abc/, 'python') //javascript
split()
方法一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的字符串存储到数组中。
let str = "1,2,3,4,5,6"
//根据字符串对字符串进行分割
str.split(',') //['1','2','3','4','5','6']
//根据正则表达式对字符串进行分割(匹配上了)
//若匹配成功,最终返回一个数组,数组中的元素就是每个被分割的字符串
str.split(/,/) // ['1','2','3','4','5','6']
//根据正则表达式对字符串进行分割(没有匹配上)
//若匹配失败,也会返回一个数组,数组中只有一个元素,那就是这个字符串整体
str.split(/\+/) //['1,2,3,4,5,6']
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。