博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js正则表达式大全
阅读量:5174 次
发布时间:2019-06-13

本文共 3450 字,大约阅读时间需要 11 分钟。

构造正则表达式

var ex = /[abcd]/gi;  //通过字面常量的方式,一对正斜杠中间写表达式内容,后面可以跟修饰符。
var re = new RegExp("[abcd]","gi");  //通过构造函数的方式,第一个参数是表达式内容,第二个参数是修饰符

修饰符:

i    执行大小写不敏感的匹配

g   执行全局匹配,即返回所有匹配的子串,默认只返回第一个匹配
m    多行匹配,^ 和 $ 在字符串的每一行都进行一次匹配。

元字符:

( [ { \ ^ $ | ) ? * + .

\    在字面意义和特殊意义之间进行转换,例如\/表示字符/。
^    匹配字符串的开头,例如
$    匹配字符串的结尾
()  小括号里面的元素结合为一组,可以在后面引用它

[]  匹配字符集中的一个字符,例如[abc]表示匹配字符a或b或c;[^abc]表示匹配不等于a或b或c的字符;[a-e]匹配在a到e范围内的字符;[a-b0-9A-Z_]匹配字母数字和下划线。

|    或操作,例如(jpg|png)表示匹配字符串jpg或字符串png。

{}    表示前面的字符应该出现的次数。{n}表示出现n次;{n,}表示至少出现n次;{n,m}表示出现n次到m次。

*    匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。
+     匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
?     匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。

大部分元字符与自己最近的元素或组相结合,除了|字符与它所在的组内的前后所有元素相结合。

默认情况下对于出现次数的匹配都采用贪婪匹配的方式,即尽可能地多匹配。例如用/a+/匹配字符串"aaaaaa",将匹配"aaaaaa"而不是"a"。
在次数匹配字符后面加?可将贪婪匹配改为谨慎匹配,例如/a+?/匹配字符串"aaaaaa",将匹配"a"。

预定义类:

.     IE下[^\n],其它[^\n\r]  匹配除换行符之外的任何一个字符

\d    [0-9]                   匹配数字
\D    [^0-9]                  匹配非数字字符
\s    [ \n\r\t\f\x0B]         匹配一个空白字符
\S    [^ \n\r\t\f\x0B]        匹配一个非空白字符
\w    [a-zA-Z0-9_]            匹配字母数字和下划线
\W    [^a-zA-Z0-9_]           匹配除字母数字下划线之外的字符

注:若要匹配字符串中的换行符可以使用[\s\S]进行匹配;

 

 

正则匹配举例

验证电子邮件:/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/

以\w起头,随后可以包含任意数量的“。”或“-”只要他们之间有一个或多个\w分隔即可(对应于域名检测);

用户名之后带一个@字符;
以\w起头,随后可以包含任意数量的“。”或“-”只要他们之间有一个或多个\w分隔即可(对应于邮箱地址检测);
//以“.”加上2到3个“\w”结尾。(对应于邮箱地址后缀的检测例如“.com”,“.cn”等)。

验证文件路径:/^(http|https|file):\/\/\S+\/\S+/i

文件路径使用http或https或file开头,后跟://
然后是任意个非空字符表示的文件路径
最后是/加上任意非空字符表示的文件名
修饰符i忽略大小写

正则表达式的使用

RegExp类:
RegExp.source    返回正则表达式的内容    
RegExp.test(s)    测试字符串s是否与正则表达式项匹配    
RegExp.exec(s)    匹配字符串s,返回匹配到的子串和各个组匹配到的子串的数组,若没有匹配到任何子串则返回null
RegExp.lastIndex 返回最近一次匹配到的位置。默认值为-1

String类:

String.search(re)    //返回re匹配到的第一个位置,若不匹配则返回-1。
String.match(re)    //返回re匹配到的所有子串的数组,若不匹配返回null。
String.split(re)    //用正则表达式匹配到的所有子串来将字符串分割为字符串数组。
String.replace(re, s) //将re匹配到的字符替换为s。(replace方法的第二个参数也可以是函数)

s可以反向引用匹配到的组例如"$2"可反向引用第二次匹配到的字符串,写成str.replace(re, "$2, $1");

 

(?:pattern) 
非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
(?=pattern)
非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
(?<=pattern)
非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
(?<!pattern)
非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。这个地方不正确,有问题 
 
 
var str3 = "haaaaaaaaaaaaaaaabaaaaaaaaaaaab";
console.log(str3.match(/h.*b/));
//haaaaaaaaaaaaaaaabaaaaaaaaaaaab
console.log(str3.match(/h.*?b/));
//haaaaaaaaaaaaaaaab
console.log(str3.match(/ha+/));
//haaaaaaaaaaaaaaaa
console.log(str3.match(/ha+?/));
//ha
var str = "hello123back, hello456back";
console.log(str.match(/hello(?!456).*?back/));
//hello123back
console.log((str.match(/(hello).*/)));
//hello123back, hello456back
console.log((str.match(/(?:hello).*/)));
//hello123back, hello456back
var str2 = '<input type="text" id="xxx" name="xxx" value="xxx" /><input type="hidden" id="xxx" name="xxx" value="xxx" />';
console.log(str2.match(/<input[^>]*?hidden.*?\/>/));
//<input type="hidden" id="xxx" name="xxx" value="xxx" />

 

转载于:https://www.cnblogs.com/ckAng/p/10502137.html

你可能感兴趣的文章
java中base64
查看>>
常用的mysql操作命令
查看>>
Unity3D的菜单及编辑器扩展
查看>>
我是如何拿到蚂蚁金服 offer 的 ?
查看>>
Android Volley 的基本使用/设置HTTP请求参数、apikey
查看>>
Hibernate框架
查看>>
Vim编辑器的使用总结
查看>>
ArcGIS REST 缓存清除(地图空白不显示的问题 )
查看>>
第0次作业
查看>>
"类" 库添加继承
查看>>
ucos在s3c2410上运行过程整体剖析之基础知识-与UCOS运行有关的ARM9芯片知识--续 ...
查看>>
存储器的寻址问题 分类: 计算机组成原理 2011-...
查看>>
DDRmenu(翻译)
查看>>
atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7
查看>>
Atitit 架构的原则attilax总结
查看>>
ASP.Net之数据绑定
查看>>
Android自动化测试第三季第二讲Toast控件文字获取
查看>>
Google Analytics的能与不能
查看>>
Ubuntu 基本操作
查看>>
JAVA数组的定义及用法
查看>>