JavaScript正则表达式分组模式:捕获性分组与非捕获性分组及前瞻
来源:互联网 发布:2016淘宝手机开店认证 编辑:程序博客网 时间:2024/05/19 08:46
javascript正则表达式里分组模式以小括号来()表示分组,例:/([a-z])/
捕获性分组:()
捕获性分组工作模式()会把每个分组里匹配的值保存起来。
比如利用捕获性分组把 hello world 互换成 world hello:
方法一:通过exec函数
var str = 'hello world'; //首先创建好字符串var pattern = /([a-z]+)\s([a-z]+)/; //先通过正则匹配这个字符串,用分组模式来获取这两个单词var arr = pattern.exec(str); // exec方法返回的是一个数组,包含匹配到的字符串以及分组(也称子串)里的值console.log(arr); //['hello world','hello','world'] console.log(arr[0]); //'hello world' 匹配到的字符串console.log(arr[1]); //'hello' 第一个分组([a-z]+)的值console.log(arr[2]); //'world' 第二个分组([a-z]+)的值//这时候两个分组的值都得到了,接下来用字符串拼接法实现互换var n_str = arr[2]+' '+arr[1];console.log(n_str) //world hello
方法二:通过属性$1-9
var str = 'hello world'; var pattern = /([a-z]+)\s([a-z]+)/; pattern.test(str); //这个地方必须运行正则匹配一次,方式不限,可以是test()、exec()、以及String的正则方式console.log(RegExp.$1) //'hello' 第一个分组([a-z]+)的值console.log(RegExp.$2) //'world' 第二个分组([a-z]+)的值var n_str = RegExp.$2+' '+RegExp.$1;console.log(n_str) //world hello
方法三:通过String的replace()
var str = 'hello world'; var pattern = /([a-z]+)\s([a-z]+)/; var n_str = str.replace(pattern,"$2 $1"); //这里的$1、$2与方法二里的RegExp.$1、RegExp.$2作用是相同的。console.log(n_str) //world hello
非捕获性分组:(?:)
非捕获性分组工作模式下分组(?:)会作为匹配校验,并出现在匹配结果字符里面,但不作为子匹配返回。
比如利用非捕获性分组获取字符串000aaa111,而且只返回一个值为aaa111的数组:
//先看用捕获性分组匹配会返回什么var str1 = '000aaa111'; var pattern = /([a-z]+)(\d+)/; //捕获性分组匹配var arr = pattern.exec(str1); console.log(arr) //['aaa111','aaa','111'] 结果子串也获取到了,这并不是我们想要的结果//非捕获性分组var str2 = '000aaa111';var pattern2 = /(?:[a-z]+)(?:\d+)/; //非捕获性分组匹配var arr2 = pattern.exec(str2); console.log(arr2) //['aaa111'] 结果正确
前瞻:(?=)和(?!)
前瞻分为正向前瞻和反向前瞻,正向前瞻(?=)表示后面要有什么,反向前瞻(?!=)表示后面不能有什么。
前瞻分组会作为匹配校验,但不出现在匹配结果字符里面,而且不作为子匹配返回。
用正向前瞻匹配一批图片格式:
//正向前瞻,匹配.jpg后缀文件名var str = '123.jpg,456.gif,abc.jpg';var partern = /\w+(?=\.jpg)/g; //正向前瞻匹配console.log(str.match(partern)); //['123', 'abc'] 返回结果正确,没有匹配456.gif
用反向前瞻匹配一批字母加数字:
//反向前瞻,匹配3个及以上的a,而且后面不能有000的字符var str = 'aaa000 aaaa111 aaaaaaa222';var partern = /a{3,}(?!000)/g; //反向前瞻匹配console.log(str.match(partern)); //['aaaa', 'aaaaaaa'] 返回结果正确,没有匹配aaa000
0 0
- JavaScript正则表达式分组模式:捕获性分组与非捕获性分组及前瞻
- javascript正则表达式分组-捕获性分组/非捕获性分组/正则前瞻
- javascript非捕获性分组和前瞻
- 【JavaScript 学习--01】--正则表达式的正则前瞻(?=)和非捕获性分组(?:)区别
- 正则表达式 非捕获性分组
- 正则表达式-非捕获性分组
- 正则表达式捕获分组
- 正则表达式之捕获型分组与非捕获型分组
- javascript正则表达式:非捕获分组的一个使用例子
- 正则表达式高级用法(分组与捕获)
- 正则表达式分组捕获说明
- java 高级正则表达式 分组 捕获 引用
- 正则表达式 分组捕获(反向引用)
- JAVA正则表达式高级用法(分组与捕获)
- JAVA正则表达式高级用法(分组与捕获)
- Java正则表达式——分组与捕获
- JAVA正则表达式高级用法(分组与捕获)
- Java正则表达式——分组与捕获
- 简单爬虫入门:Python 爬虫之糗事百科
- 解决chrome浏览器自动填充密码
- Scrapy解决formrequest中formdata为dict问题
- c语言每隔1秒向文件中写入一行记录,类似日志记录
- QT中鼠标位置获取问题之event->globalPos()与pos()函数
- JavaScript正则表达式分组模式:捕获性分组与非捕获性分组及前瞻
- PHP 日期函数
- 单向加密 对称加密 非对称加密
- 五险一金
- react-native(windows)环境搭建
- 页面从后台接口获取数据流显示照片
- 很好的关于贝叶斯理论的文章
- 11-3
- 第一天