content
{:toc}
由正则表达式如何匹配相同字符出发,讲讲正则表达式中的选择、分组和引用。
问题
在外刊君读者群中看到有人提出这样的一个需求:
把字符串切成连续相同字符的正则怎么写?比如abbcccdddd切成a,bb,ccc,dddd
之前我对正则表达式也是略有研究,想尝试一下。其实我对正则表达式的学习基本完全来源于犀牛书的第10章,真正看懂这一章,我觉得操作正则表达式应该不在话下。
继续阅读 »
一直感觉正则表达式很神奇,非常强大,但并没有系统学习过,今天抽空过一遍,希望能够彻底掌握它
more
简介
正则表达式在处理文本信息时非常有用,不限于代码、日志文件、文档等。在开始学习正则之前,需要有这种概念:任何文本都是由单个字符组成。
继续阅读 »
分组 非捕获分组
在正则表达式中遇到小括号就可以认为是一个分组,比如/(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
继续阅读 »
本文讨论何时以及如何使用正则表达式全局匹配(/g),以及使用全局匹配可能会遇到的一些坑。
什么是全局匹配
有时候你可能期望重复匹配目标字符串多次,那么你就会创建一个全局匹配的正则表达式(通过正则表达式字面量 /.../g 或创建 new RegExp(..., 'g') 对象),这样正则表达式的 global 属性将会是 true,并且会导致一些行为的不同,下面会具体介绍。
javascript
var regex = /x/g;
regex.global // true
全局的正则表达式的另一个属性 lastIndex 表示上一次匹配文本之后的第一个字符的位置,上次匹配的结果是由方法 RegExp.prototyp
继续阅读 »
正则表达式语法
一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
这里有一些可能会遇到的正则表达式示例:
继续阅读 »
元字符
元字符安(Meta-Characters)是正则表达式中具有特殊意义的专用字符,常用的元字符如下表:
元字符|含义
---|---
.|匹配除换行符的任意字符
\w|匹配字母或数据或下划线或汉字
\s|匹配任意空白字符
\d|匹配数字
\b|匹配单词的开始或结束
^|匹配字符串的开始
$|匹配字符串的结束
-|表示范围
[]|匹配括号中的任意一个字符
*|量词,表示重复零次或多次
+|量词,表示重复一次或多次
?|量词,表示出现一次或零次
{n}|量词,表示重复n次
{n,}|量词,表示重复n次或n次以上
{n,m}|量词,表示重复n到m次
继续阅读 »
各个语言的正则表达式使用,在这些记录一下:
Javascript
Javascript的正则函数好像是最简单的了,也可能是因为本身就是一种弱类型的语言:看一下使用吧:
var pattern = /test$/;
pattern.match("test"); // 这个会匹配全串,返回true or false;
pattern.exec("test"); //这个呢则会查找每个匹配的部分,返回值是匹配的字符串
继续阅读 »
content
{:toc}
记录一下阅读蝴蝶书的笔记,本篇为书中以下章节的笔记:继承、数组和正则表达式。
继承
继承的两大好处:代码重用,引入一套类型系统的规范。
伪类
JavaScript 通过构造器函数产生对象。
继续阅读 »
原理:基于自定义的标签;
实现:目前只有文本框和密码域的验证
more
js
/*************************自定义的模式匹配函数
*********rule:匹配规则
*********vaule:匹配对象(表单元素的值)
*********warning:警告内容
*********note:显示警告的DIV层
************************************************/
function myReg(rule, value, warning, note) {
var reg = new RegExp(rule);
var noteDiv = documen
继续阅读 »
tbox里面针对三个正则库(pcre/pcre2/posix)进行了封装,实现接口统一和跨平台处理,只要xmake在编译配置的时候自动检测到其中一种库,就可以使用了,一般会优先使用pcre2。
如果你不想过多的依赖第三方库,可以切换到posix的正则,调用 xmake f --pcre=false --pcre2=false 把pcre的库禁用了就行了。
首先给个最简单的匹配单个子串的例子:
```c
// 执行简单匹配,第二个参数是匹配模式,默认传0就行了
tb_vector_ref_t results = tb_regex_match_done_simple("(\w+)\s+?(\w+)", 0, "he
继续阅读 »