转载请注明出处,http://blog.csdn.net/Bule_Zst/article/details/77290354

本文内容有一部分是JS里面的,有一部分是Python中的,所以,可能会出现不兼容的情况,请见谅。


修饰符(JS)

g:全局查找,否则,匹配一次就结束
i:不区分大小写
m:多行搜索,默认正则把换行当成字符处理,使用m后,换行被看做是新字符串的开始,一般搭配’^’使用

用法:new RegExp( '\\bis\\b', 'g' );


元字符

|:或,例:a|b,表示匹配a或者b
\:转义字符
():分组,例:(aaa){5},匹配’aaa’5次,用 ?: 取消分组,如 (?:\d)(a) 则,第一分组是匹配到的a
{}:量词,\d{20}表示匹配20个数字
\t:水平制表符(Tab)
\v:垂直制表符
\n:换行符
\r:回车符
\0:空字符
\f:换页符
\cX:相当于Ctrl + X

使用[]来创建类

如 [abc],则遇到a、b、c都会匹配,但是只会匹配其中的一个(bac,用 [abc] 匹配,只会得到b)

反向类:

  • [^abc],匹配不是其中的即可

范围类:

  • [a-zA-Z],则匹配所有字母
  • [0-9],则匹配所有数字
  • [0-9-],则匹配所有数字以及 ‘-’ 字符

预定义类:

  • .:除回车换行以外的所有字符
  • \d:数字
  • \D:非数字
  • \s:空白符
  • \S:非空白符
  • \w:单词字符(字母数字下划线
  • \W:非单词字符

边界

  • \b:单词边界
  • \B:非单词边界,This \Bis\b
  • ^:开头
  • $:结尾

量词

  • ?:最多一次
  • +:最少一次
  • *:任意次
  • {n}:n次
  • {n,m}:n到m次
  • {n,}:至少n次
  • {0,m}:最多m次
  • 正则默认为贪婪模式,匹配最多次,通过’?’取消贪婪模式:\d{3,5}?

反向引用(JS)

$n表示第n个分组的内容,如果不分组,则把$n当成字符串

断言

前瞻后顾,正则从字符串开始位置向后匹配,所以字符串末尾方向为前(JS不支持后顾)

前瞻:当匹配到某字符时,看前面的字符是否符合断言

  • 正向前瞻:(?=\d),当匹配到了之后看之后字符是否是数字,只有是数字匹配才成功
  • 负向前瞻:(?!\d),只有不是数字匹配才成功

以下为JS内正则的使用方法

定义正则表达式

var reg = /\bis\b/g; 
or
var reg = new RegExp( '\\bis\\b', 'g' ); 

对象属性

lastIndex:当前匹配内容的下一字符的位置(如果不是全局查找,则lastIndex不生效,始终为0)

PS: 以下的reg表示合法的正则表达式,str表示字符串

正则自带的方法函数

reg.test(str)
是否能匹配到,可以则返回true,不可以返回false

ret = reg.exec(str)
未匹配上则返回 null
匹配上则返回:匹配到的文本,分组的文本(如果有的话,有几个返回几个)
ret.index:匹配字符的起始位置

JS字符串有关正则的方法函数

str.search(reg)
不支持全局匹配
匹配不到返回-1
匹配到返回匹配字符的起始位置

str.match(reg)
未匹配上则返回null

  • 非全局调用:
    • ret = str1.match(str2)
    • ret.index:匹配字符的起始位置
    • 返回的数组:匹配到的文本,分组的文本(如果有的话,有几个返回几个)
  • 全局调用:
    • 没有index属性
    • 返回的数组:匹配到的文本,分组的文本(如果有的话,有几个返回几个)

str.split(reg)
可传入正则

str.replace(reg1,reg2)
支持分组,在reg2中通过$n获取匹配到的内容实现动态替换
默认全局匹配为false

  • reg2可为function
    • 参数:匹配到的字符串,分组内容(有几个就是几个参数),匹配字符的起始位置,原字符串
    • 一般不用分组内容,通用型太差
    • 例如:
'a1b2c3'.replace( /\d/g, function( match, index, original ){ 
    return parseInt( match ) + 1; 
}) 

                 效果:a2b3c4

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐