首页 > 代码库 > 正则表达式
正则表达式
正则表达式,又叫规则表达式,我们写一个正则表达式,其实就是写一个规则,那么写一个规则干什么呢? 去匹配字符串,就是看看字符串中有哪个部分和我们定义的规则相符合,找到这些匹配的字符,我们就可以进行字符替换删除等操作,如下例子: 找到字符串中的所有数字,转化成字符G. 可以看到,正则表达式极大地方便了对字符串的操作。
let reg = /\d/g; // 定义一种规则,\d 表示数字。 let str = ‘a4c5d6‘ let strReplaced = str.replace(reg,"G") console.log(strReplaced) // aGcGdG
JS 是通过内置RegExp对象来支持正则表达式。既然是对象,那就有两种创建方式, 一种是对象字面量,一种是构造函数。
// 对象字面量 let regLiteral = /\d/g; // 构造函数 let regCons = new RegExp(‘\\d‘, "g");
构造函数使用不是太方便,一般都是使用字面量,只有在事先不确定的情况下需要动态生成时,才需要用到构造函数。
2, 标识符: 上面的g 就是一个标识符,除了它,还有两个i, m
g 是global,表示全局匹配。为什么会有这个标识符呢? 因为正则表达式匹配字符串时,默认是惰性匹配,就是,它只要成功匹配到一个,它就不会再进行匹配,把let reg = /\d/g 中的g 去掉,
let reg = /\d/; let str = ‘a4c5d6‘ let strReplaced = str.replace(reg,"G") console.log(strReplaced) // aGc5d6
可以看到,它只会匹配第一个数字4。从字符串的起始位置开始匹配,只要成功匹配到一个,就停止了, 即使字符串后面还有和正则表达式相匹配的,它也不管。加上g 标识符,就告诉正则表达式全部匹配,字符串中只要有和正则表达式相匹配的,就全部进行匹配,对应到替换字符,就是全部替换掉相符合的。
i,是ignore, 忽略大小写。这很好理解, js就是区分大小写的,如果用一个大写字母去区配字符串的话,它只会去找字符串中的大写字母。如果加上i修饰符,就表示可以忽略大小写,小写字母也是ok的。
// 没有加i标识符,可以看到它只会匹配字符串中的小写a let reg = /a/g; let str = ‘aAbbcc‘ let strReplaced = str.replace(reg,"G") console.log(strReplaced) // GAbbcc
// 加i标识符,可以看到大写A小写a都会匹配 let reg = /a/gi; let str = ‘aAbbcc‘ let strReplaced = str.replace(reg,"G") console.log(strReplaced) // GGbbcc
3, 正则表达式有两种基本字符组成,一种是原义文本字符,一种是元字符。原义文本字符,是指这个字符就是它本来的意思。let reg = /a/, a 就是小写字母a, 它也只会匹配小写字母a, 这就是它本来的意思,没有其他任何意思。 元字符,它是指有特殊含义的字符,如\d, 它不是匹配 一根\和小写字母d 的组合,\d 表示的是任意的数字。 正则表达式中有以下元字符:. * ? ^ 等, 也就是说,这些字符都有特殊的意思.
4, 字符类
一般情况下,正则表达式在去匹配字符串的时候,都是一个字符一个字符的去匹配,也就是正则表达式中的一个字符对应字符串的一个字符。 但有时候,我们想让正则表达式中的多个字符去匹配一个字符,也就是,我们字符串中只要出现多个字符中一个就算匹配成功。比如,我们只要求字符串中有数字就行,而不管数字是哪个。这时就要用到[], 中括号中的字符,我们字符串中只要出现一个就ok.
// []只要有中括号中的一个字符就算成功。 let reg = /[0123456789]/g; let str = ‘a1b2c3d4‘ let strReplaced = str.replace(reg,"G") console.log(strReplaced) // aGbGcGdG
可以看到,只要字符串中有一个数字,就算匹配成功。我们把所有的数字一一列出来,比较麻烦,如果有26个字母,我们要列了26个字母,这更麻烦了。还好正则表达式提供了范围的书写,0-9,a-z ,并且还可以连写。
let reg =[0-9a-zA-z]
在[]中其实还可以用一个字符,那就是^, 它表示取反。[^0-9] 就表示除了0-9之处的任意字符。[^0-9a-zA-z] 则表示除了0-9,a-z A-Z 之外的任意字符。对于这些常用的表示符,正则表达式也提供了一些预定义类,[0-9]表示数字,就可以用\d 来代替,[^0-9] 表示非数字,可以用\D来代替, 还有\s, \w, \W等。 小写形式是什么,大写形式就是它的取反.
\d, d是digital 表示数字, 那么\D 则表示不是数字; \s, space 表示空白符, \S就表示非空白符. \w, word, 表示单词字符(字母,数字加下划线), \W 表示非单词字符,这里还有一个 点号 . 它表示除回车和换行符之外的任意字符。我们写一个 ab 开始,后面紧跟数字,再后面是任意字符的正则表达式,let reg = /ab\d./
let reg = /ab\d./g; let string = ‘there is ab5td and abds ‘ let replaceString = string.replace(reg,"A"); console.log(replaceString) // there is Ad and abds
这个正则表达式区配的是ab5t
5, 边界类
边界类主要用四个: ^ 表示以什么开始,$表示以什么结尾, \b, boudary 表示单词边界,\B 表示非单词边界。
正则表达式