博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
随手查阅的正则匹配笔记
阅读量:6528 次
发布时间:2019-06-24

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

常见需求如下:

  • 如果你只需要获取字符串中的首个匹配项
var re = /quick\s(brown).+?(jumps)/ig;var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');// 就算有 g 标识,通过 exec 也只能获取到首个匹配项// result[0]: Quick Brown Fox Jumps复制代码
  • 使用了 g 标识时(不使用时以下方法也适用),如果你想获取正则中的组匹配(capture groups)信息
var re = /quick\s(brown).+?(jumps)/ig;var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');// index 1~n 就是组匹配到的结果(此处正则中有两个括号,则 n 为 2)// result[1]: Brown// result[2]: Jumps复制代码

关于 exec 的更多详细说明可以查看 MDN 文档

  • 不使用 g 标识时,如果你想获取正则中的组匹配(capture groups)信息
'mockid=272;其他说明文字……'.match(/mockid=(\d+);/i)// ["mockid=272;", "272", index: 0, input: "mockid=272;其他说明文字……"]// 如果加上 g 标识,就只能得到 ["mockid=272;"]复制代码
  • 匹配多种可能出现的值,获取最终匹配到的值
'GET/path/to/some/place'.match(/^(GET|POST|PUT|DELETE)/gi)// 输出:["GET"]复制代码

关于 match 的更多详细说明可以查看 MDN 文档

  • 只想知道是否匹配某个正则(true or false)
// RegExp.prototype.test()var str = 'hello world!';var result = /^hello/.test(str);console.log(result); // true复制代码
  • 字符串是否匹配其中一种情况
let type = 'Array';/Array|Object/.test(type) // true复制代码

关于 test 的更多详细说明可以查看 MDN 文档

// String.prototype.search()var str = "hey JudE";var re = /[A-Z]/g;var re2 = /[.]/g;console.log(str.search(re)); // returns 4, which is the index of the first capital letter "J"console.log(str.search(re2)); // returns -1 cannot find '.' dot punctuation// 因此可以直接判断返回负值时匹配结果为 false复制代码

关于 search 的更多详细说明可以查看 MDN 文档

  • 对匹配成功的字符串进行处理
function replacer(match, p1, p2, p3, offset, string) {  // p1:([^\d]*) p2:(\d*) p3:([^\w]*)  // p1 非数字, p2 数字, p3 非文字  return [p1, p2, p3].join(' - ');}var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);console.log(newString);  // abc - 12345 - #$*%复制代码

推荐正则工具:

非常好用的一个正则编写工具,我会点开左侧菜单栏里的 cheatsheet 来学习编写符合我需求的正则表达式。

可视化查看正则表达式(复杂版),很直观,神器一枚

可视化查看正则表达式(简化版)

转载地址:http://wzxbo.baihongyu.com/

你可能感兴趣的文章
[CF785E]Anton and Permutation
查看>>
第10周
查看>>
Qt 状态栏设置
查看>>
对象释放三种方法对比:Free --> FreeAndNil() --> DisposeOf()
查看>>
zabbix监控mysql数据库信息脚本
查看>>
mongodb用mongoose取到的对象不能增加属性
查看>>
组合数学模板
查看>>
JS---星星评分
查看>>
Java的I/O系统
查看>>
linux/unix shell bash script 小记
查看>>
一个由单例模式在多线程环境下引发的 bug
查看>>
BZOJ2882:工艺(SAM)
查看>>
Ubuntu12.10 使用DNW传数据 进行ARM开发板烧写
查看>>
spring boot 继承WebMvcConfigurationSupport后自动配置不生效问题
查看>>
Http与Https
查看>>
POJ 2407 (欧拉函数)
查看>>
(七)Centos之链接命令
查看>>
(三)UML之类图关系
查看>>
紫书 例题 10-1 UVa 11582 (unsigned long long+模)
查看>>
反射的妙用_项目中的时间配置问题
查看>>