正则表达式
来源:互联网 发布:淘宝助理csv导入0个 编辑:程序博客网 时间:2024/06/16 01:44
基本知识
学习JS DOM编程艺术时关于正则表达式的内容还是不是很清楚,整理了一下:
1 元操作符
2 元字符都表示匹配一次,修饰数量的元字符都是对前方字符的数量的限定
3 下面的表达式表示的意义任意2-8位数字,^表示后面的内容是字符串的开始,$表示前面的内容是字符串的结束
^\d{2,8}$
4 [0-9]=\d
5 用|匹配分支条件时,由左至右测试每个条件,如果满足了某个分支条件后就不再测试后面的条件
6 所谓单词指的是不少以一个字符的\w
7 后向引用,用于重复搜索前面某个捕获组匹配的文本,\1对应的是捕获组1对应的文本,\0对应的是整个正则表示;
8 零宽断言
- 断言判断的是位置
- 断言是一个判断条件,对于(?=exp),当条件为真时,即认为此位置后面的字符能满足exp,匹配此位置前面的字符;
- 对于(?<=exp),当条件为真时,即认为此位置前面的字符能偶满足exp,匹配此位置后的字符;
9 负向零宽断言断言的是此位置的前/后不能匹配表达式exp,对于(?!exp),认为此位置后面的字符不能满足exp,匹配此位置前面的字符
对于(?<!exp),认为此位置前面的字符不能满足exp,匹配此位置后面的字符,例如
(?=exp)a(?<=exp)
认为a前面的字符是exp,后面的字符是exp
10 注释模式(?#comment),应该启用“忽略模式离得空白字符”选项,这样可以添加空格和换行
11 贪婪模式尽量多匹配,懒惰模式尽量少匹配
12 默认区分大小写,找到第一个匹配项就结束,单行寻找
var e=/pattern/
- 在/pattern/后面添加标识符g,表示全局模式,应用于所有字符串
- 加标识符i,表示不区分大小写
- 加标识符m,表示多行模式,继续寻找下一行
13 捕获组存在的前提是整项已匹配
14、
var re=/[bc]at/gi;re.test("atcba") // 结果为faslevar result=re.exec("atcba")result.index // 表示匹配项在字符串中匹配的位置result.input // 应用正则表达式的字符串result[0] // 与整个模式匹配的字符串result[1] // 与模式中的捕获组匹配的字符串
15 对于exec方法,每次只返回一个匹配项result[0]
设置全局模式g,调用一次exec,只返回一个结果,但是每次调用都会忽略已匹配的字符串,在剩余的字符串中继续查找
未设置全局模式g,每次调用都返回相同的结果
16 对于test方法,结果是true或fasle,常用在if语句中进行判断
17 exec是正则表达式的方法,而不是字符串的方法,它的参数才是字符串,如下所示
var reg = new RegExp("abc") ; var str = "3abc4,5abc6";reg.exec(str);
match是字符串执行匹配正则表达式规则的方法,他的参数是正则表达,如
var reg = new RegExp("abc") ; var str = "3abc4,5abc6";str.match(reg);
二者的异同点
- 两个方法都是查找符合条件的匹配项,并以数组形式返回
- 当没有找到匹配项时,都返回null
- 当正则表达式包含子表达式且不包含全局标志g时,二者返回相同的数组,均包括整体匹配内容和各捕获组(子表达式)匹配内容
- 当正则表达式不含子表达式并且不包含全局标志g时,二者返回相同的数组,均返回第一个匹配的字符串内容
- 当正则表达式不含子表达式但是包含全局标志g时,二者返回不同的数组,match会返回所有符合条件的匹配项,数组第一项存放第一个匹配项,数组第二项存放第二个匹配项…依 次类推。 exec则永远返回第一个匹配项。但是当连续调用exec时,则每次的返回值都是下一个匹配项。
- 当正则表达式包含子表达式时且包含全局标志g时,二者表现不一致。
- match会返回所有符合条件的匹配项,但不会再返回子表达式的匹配项了。数组第一项存放第一个匹配项,数组第二项存放第二个匹配项…依次类推
- exec会返回子表达式的匹配项。换句话说就是,数组第一项存放整个匹配项,数组第二项存放第一个子表达式匹配项,数组第三项存放第二个子表达式匹配项…依次类推。
示例1:
var str = 'cat,bat,kat';var patten = /at/g;str.match(patten); // ['at', 'at', 'at']patten.exec(str); // ['at']
示例2:
var str = 'cat,bat,kat';var patten = /\w+/g;str.match(patten); //['cat', 'bat', 'kat']//第一次调用patten.exec(str); //['cat']//第二次调用patten.exec(str); //['bat']//第三次调用patten.exec(str); //['kat']
示例3:
var str = 'cat10, bat20, kat30';var patten = /\w(at)\d+/g;var arr = str.match(patten); // ['cat10', 'bat20', 'kat30']var arr = patten.exec(str);arr[0] // ['cat10']arr[1] // ['at']
示例4:
var reg = new RegExp("abc") ; var str = "3abc4,5abc6";alert(reg.exec(str)); // abcalert(str.match(reg)); // abc
示例4:
var reg = new RegExp("abc","g") ; var str = "3abc4,5abc6";alert(reg.exec(str)); // abcalert(str.match(reg)); // abc abc
因为match执行了全局匹配查询;而exec如果没有子表达式只会找到一个匹配的即返回。
示例5:
var reg = new RegExp("a(bc)") ; var str = "3abc4,5abc6";alert(reg.exec(str)); // abc,bcalert(str.match(reg)); // abc,bc
示例6:
var reg = new RegExp("a(bc)","g") ; var str = "3abc4,5abc6";alert(reg.exec(str)); // abc,bcalert(str.match(reg)); // abc,abc
实际应用
正则验证空格
textarea id="input""></textarea><button type="button" id="btn">click</button><script> $('#btn').click(function(){ if(/^\s+$/gi.test($('#input').val()) || $('#input').val().length === 0){ alert("nonono") } else{ alert('ok') } })</script>
正则去除空格
利用JS的replace方法,replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
stringObject.replace(regexp/substr,replacement)
也可以利用jQuery的trim方法,$.trim()函数会移除字符串开始和末尾处的所有换行符,空格(包括连续的空格)和制表符。如果这些空白字符在字符串中间时,它们将被保留,不会被移除。
var value1 = $('#input').val().replace(/(^\s+)|(\s+$)/g, "sb");//替换首尾空格var value2 = $('#input').val().replace(/(\s+)/g, "sb");//替换所有空格var value3 = $('#input').val().replace(/(\s+)/g, "");//去除所有空格var value4 =$.trim($('#input').val());//去除首尾空格
- 【正则表达式】正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- Android学习笔记-ListView
- 相对路径
- C++之构造函数
- 微服务与Spring Cloud
- Handler和Runnable的关系
- 正则表达式
- list合并
- dp专题 第二十四题 鸣人的分身
- Scrapy shell调试返回403错误
- 【转】android播放音频文件
- 浅析C++多态
- list map中的value获取
- android中音频视频开发
- 【转】Android震动实现代码