参考 <
在Qt C++ 中有QRegExp , 在QML中有RegExp,它们是对字符串执行模式匹配的强大工具.
两种构造正则表达式的方法
字面量语法:
创建RegExp对象:
在"/String/i"这个正则表达式中, String就是模式(pattern), i是修饰符,表示忽略大小写.这个正则表达式的意思就是忽略大小写地匹配String这个单词.
这里简单介绍修饰符、元字符、重复(量词)、字符转义、字符集合等常见的正则表达式组成元素。
1 2 3 4 | var str = new String("I\'m a string"); str.match(/String/i); str.search(new RegExp("String","i")); str.search(RegExp("String","i")); |
(1)修饰符
QML中可以使用的修饰符有3个
1 2 3 | i //匹配时忽略大小写 g //查找所有匹配而非在找到第一个匹配后停止,即全局匹配 m //执行多匹配 |
(2)元字符
元字符是拥有特殊含义的字符,常用元字符如下:
1 2 3 4 5 6 7 8 9 | . //匹配处换行以外的任意字符 \w //匹配字母、数字、下划线或汉字 \s //匹配任意的空白符 \S //匹配非空白字符 \d //匹配数字 \D //匹配非数字字符 \b //匹配单词的开始或结束 ^ //匹配字符串的开始 $ //匹配字符串的结束 |
(3)重复
下面是正则表达式中常用的量词,可以使用它们匹配重复。
1 2 3 4 5 6 | * //重复0次或多次 + //重复1次或多次 ? //重复0次或1次 {n} //重复n次 {n,} //重复n次或多次 {n,m} //重复n到m次 |
(4)字符集合
匹配没有预定义元字符的字符集合时,需要用到字符集。
只需要在[ ] 中列出它们就行了,例如[xyz]匹配x、y、z中的一个。
也可以指定一个字符范围 [0-9] 代表的含义与\d一样,[a-zA-Z]表示26×2个大小写字母
(5)转义字符
有时你可能想匹配”*“或"." , 因为他们被作为元字符使用,所以这里要转义 使用"*“或”.“即可。
要查找”“本身,使用”\"
最后说明: String类的search()、match()、replace()、split()这四个方法支持正则表达式。
综合使用实例
模式"\d+“中,\d是元字符,表示查找数字, + 是量词,表示重复一次或多次.
那么”\d+"的意思就是匹配一个或多个连续的数字.
下面这个例子中,使用g来进行全局匹配, “/\d+/g”
1 2 | var numberSource = new String("2020-07-03, I got 96"); var results = numberSource.match(/\d+/g); |
匹配西安市电话,添加对“(029)nnnnnnnn"、"(029)nnnnnnnn"这两种形式的支持,可以使用下面的正则表达式
1 | ”[((]?029[))]?\d{8}/mg“ |