正则表达式
正则表达式是用于匹配字符串中字符组合的模式。在 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基础知识总结
