本文讨论何时以及如何使用正则表达式全局匹配(/g),以及使用全局匹配可能会遇到的一些坑。
什么是全局匹配
有时候你可能期望重复匹配目标字符串多次,那么你就会创建一个全局匹配的正则表达式(通过正则表达式字面量 /.../g 或创建 new RegExp(..., 'g') 对象),这样正则表达式的 global 属性将会是 true,并且会导致一些行为的不同,下面会具体介绍。
javascript
var regex = /x/g;
regex.global // true
全局的正则表达式的另一个属性 lastIndex 表示上一次匹配文本之后的第一个字符的位置,上次匹配的结果是由方法 RegExp.prototyp
继续阅读 »
一直感觉正则表达式很神奇,非常强大,但并没有系统学习过,今天抽空过一遍,希望能够彻底掌握它
more
简介
正则表达式在处理文本信息时非常有用,不限于代码、日志文件、文档等。在开始学习正则之前,需要有这种概念:任何文本都是由单个字符组成。
继续阅读 »
New features
Add automaticlly check libc interfaces
Support custom allocator
Add trace for allocator in the debug mode
Add static_pool module
Add stream interfaces for reading all data to string
Add adler32 hash algorithm
Add tb_memmem interface
Add regex module with pcre, pcre2 or posix regex
Changes
Optimize stre
继续阅读 »
分组 非捕获分组
在正则表达式中遇到小括号就可以认为是一个分组,比如/(a)bcda\1/,(a)就是一个分组,\1代表第一个分组。这种分组可以成为
捕获分组。
var reg = /(a)bcd\1/
console.log(reg.test('abcdef')) // false
console.log(reg.test('abcdaef')) // true
\1是个占位符,意思是这里的内容匹配的和第一个分组的一样,比如/(xyz)bcd\1/实际上就等同于/(xyz)bcdxyz/,
与其相对的就是非捕获分组,比如/(?:a)bcda/,(?:a)就是非捕获分组,不能通过\1引用
var reg = /(?:a
继续阅读 »
新特性
自动检测所有系统libc接口,优先使用系统版本
支持自定义内存分配器,并且能够在debug模式下,获取每次分配的代码位置信息,用于自定义追踪
增加轻量级static_pool来维护整块buffer的内存分配,适合局部管理部分内存,pool虽然也能维护,但是底层基于large_pool,比较重量级,适合全局管理内存
增加stream快速读取全部数据到string的接口
增加adler32 hash算法
增加tb_memmem接口
采用pcre/pcre2/posix regex实现正则表达式库
改进
优化stream,支持对字符设备文件的读写
修改tb_init接口,增加allocator自定义内存分配器参数,实现用户的侵
继续阅读 »