正则表达式
正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。这些模式被用于 RegExp
的 exec
和 test
方法, 以及 String
的 match
、matchAll
、replace
、search
和 split
方法。
创建正则表达式
字面量创建
let reg = /[abc]/
调用构造函数
let reg = new RegExp("12312");
什么时候使用构造函数创建正则?
在脚本运行过程中,用构造函数创建的正则表达式会被编译。
如果正则表达式将会改变,或者它将会从用户输入等来源中动态地产生,就需要使用构造函数来创建正则表达式
。正则表达式相关的字符需要记熟
\
。转义字符。^
。匹配输入的开始。$
。匹配输入的结束。*
。匹配前一个表达式 0 次或多次。等价于 {0,}。+
。匹配前一个表达式 1 次或多次。等价于 {1,}。?
。匹配前一个表达式 0 次或1次。等价于 {0,1}。.
。(小数点)默认匹配除换行符之外的任何单个字符。(x)
。像下面的例子展示的那样,它会匹配 ‘x’ 并且记住匹配项。其中括号被称为捕获括号。模式 /(foo) (bar) \1 \2/ 中的 ‘(foo)’ 和 ‘(bar)’ 匹配并记住字符串 “foo bar foo bar” 中前两个单词。(?:x)
。匹配 ‘x’ 但是不记住匹配项。这种括号叫作非捕获括号,使得你能够定义与正则表达式运算符一起使用的子表达式。x(?=y)
。匹配’x’仅仅当’x’后面跟着’y’。这种叫做先行断言。例如,/Jack(?=Sprat)/会匹配到’Jack’仅当它后面跟着’Sprat’。(?<=y)x
。匹配’x’仅当’x’前面是’y’.这种叫做后行断言。例如,/(?<=Jack)Sprat/会匹配到’ Sprat ‘仅仅当它前面是’ Jack ‘。x(?!y)
。仅仅当’x’后面不跟着’y’时匹配’x’,这被称为正向否定查找。例如,仅仅当这个数字后面没有跟小数点的时候,/\d+(?!.)/ 匹配一个数字。(?<!y)x
。仅仅当’x’前面不是’y’时匹配’x’,这被称为反向否定查找。例如, 仅仅当这个数字前面没有负号的时候,/(?<!-)\d+/ 匹配一个数字。x|y
。匹配‘x’或者‘y’。{n}
。n 是一个正整数,匹配了前面一个字符刚好出现了 n 次。{n,}
。是一个正整数,匹配前一个字符至少出现了n次{n,m}
。n 和 m 都是整数。匹配前面的字符至少n次,最多m次。[xyz]
。一个字符集合。匹配方括号中的任意字符,包括转义序列。你可以使用破折号(-)来指定一个字符范围。[^xyz]
。一个反向字符集。也就是说, 它匹配任何没有包含在方括号中的字符。[\b]
。匹配一个退格(U+0008)。\b
。匹配一个词的边界。一个词的边界就是一个词不被另外一个“字”字符跟随的位置或者前面跟其他“字”字符的位置,例如在字母和空格之间。使用”moon”举例:/\bm/匹配“moon”中的‘m’;/oo\b/并不匹配”moon”中的’oo’,因为’oo’被一个“字”字符’n’紧跟着。/oon\b/匹配”moon”中的’oon’,因为’oon’是这个字符串的结束部分。这样他没有被一个“字”字符紧跟着。/\w\b\w/将不能匹配任何字符串,因为在一个单词中间的字符永远也不可能同时满足没有“字”字符跟随和有“字”字符跟随两种情况。\B
。匹配一个非单词边界。\cX
。当X是处于A到Z之间的字符的时候,匹配字符串中的一个控制符。例如,/\cM/ 匹配字符串中的 control-M (U+000D)。\d
。匹配一个数字。等价于[0-9]
。\D
。匹配一个非数字。等价于[^0-9]
。\s
。匹配一个空白字符,包括空格、制表符、换页符和换行符。等价于[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。
\S
。匹配一个非空白字符。\w
。匹配一个单字字符(字母、数字或者下划线)。等价于[A-Za-z0-9_]
。\W
。匹配一个非单字字符。等价于[^A-Za-z0-9_]
。\n
。在正则表达式中,它返回最后的第n个子捕获匹配的子字符串(捕获的数目以左括号计数)。比如 /apple(,)\sorange\1/ 匹配”apple, orange, cherry, peach.”中的’apple, orange,’ 。正则表达式的常用APi
exec
。一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回 null)。test
。测试是否匹配的RegExp方法,它返回 true 或 false。match
。查找匹配的String方法,它返回一个数组,在未匹配到时会返回 null。search
。在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。replace
。在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。split
。使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 方法。重点来了,使用括号的子字符串匹配
一个正则表达式模式使用括号,将导致相应的子匹配被记住。例如,/a(b)c /可以匹配字符串“abc”,并且记得“b”。回调这些括号中匹配的子串,使用数组元素[1],……[n]。
使用括号匹配的子字符串的数量是无限的。返回的数组中保存所有被发现的子匹配。下面的例子说明了如何使用括号的子字符串匹配。let re = /(\w+)\s(\w+)/; let str = "terrence 386"; let newStr = str.replace(re,"$2, $1"); console.log(newStr) // 输出 // 386, terrence
高级搜索标识
g
全局搜索i
不区分大小写m
多行搜索s
允许.
匹配换行符。u
使用unicode码的模式进行匹配。总结
不知不觉整理了这么多,本来还打算提取一下Vue中使用过的正则,正则断言
,使用括号的子字符串匹配
,看到这个也会深有感触吧最后说两句
- 动一动您的小手,
「点个赞吧」
- 都看到这里了,不妨
「加个关注」
javascript基础知识总结