正则表达式
正则表达式,如同一位技艺精湛的艺术家,能够以极致的精准和优雅,雕刻出你想要的文本形态。它的魅力在于其简练而灵活的语法,让你得以轻松地在庞杂的文字丛林中捕捉目标。
无论是验证数据格式的合法性、从复杂文本中提取关键信息,抑或是进行批量替换操作,正则表达式都能为你实现心中所想。它不受语言或平台的限制,几乎涵盖了所有主流的编程语言和文本编辑器,因此成为了文本处理领域的无可替代之选。
尽管学习曲线可能稍显陡峭,但一旦掌握,正则表达式将成为你的得力助手,为你带来高效、精确的文本处理体验。它让你能够以巧妙的方式应对各种文本处理挑战,将混沌的文本数据塑造成你想要的形态,展现出处理文本的艺术之美。
创建方式:
- 字面量: 
- 使用斜杠(
/)包围创建正则 - 例:
/abc/ - 优点:性能好,当正则保持不变时
 
 - 使用斜杠(
 - 构造函数: 
- 调用
RegExp对象的构造函数 - 例:
new RegExp("abc") - 优点:可以动态的定义,比如根据用户输入的不同的信息,创建指定的正则
 
 - 调用
 
正则规则:
-  
/abc/:匹配字符串中包含abc -  
/ab*c/:*表示前一项出现零次或者多次,可以是字符串abbbbc或者abc或者ac -  
断言:
-  
边界类断言:
-  
^:匹配开头 -  
$:匹配结束 -  
[\b]:匹配一个退格(U+0008)。(和\b不同) -  
\b:匹配边界:比如:/\bw/ 在 "want" 中匹配到 w,并且 w 只能在边 比如:/t\b/ 在 "want" 中匹配到 t,并且 t 只能在边 -  
\B:匹配边界比如:/w\B/ 在 "want" 中匹配到 w,并且 w 只能在前边 比如:/\Bt/ 在 "want" 中匹配到 t,并且 t 只能在后边 
 -  
 -  
其他断言:
-  
x(?=y):先行断言:x后面跟随着y时匹配结果为x。例如:/\d(?=\.)/.exec(55.47) 匹配 55 -  
x(x?!y):先行否定断言:x后面没有跟随y时匹配结果为x。例如:/\d+(?!\.)/.exec(55.47) 匹配 47 -  
(?<=y)x:后行断言:x前面跟随着y时匹配结果为x。例如:/(?<=\.)\d+/.exec(55.47) 匹配 47 -  
(?<!y)x:后行否定断言:x前面没有跟随着y时匹配结果为x。例如:/(?<!\.)\d+/.exec(55.47) 匹配 55 
 -  
 
 -  
 -  
字符类:
-  
[xyz] | [a-c]:匹配方括号中的任何字符,如果连字符可以使用-连接,比如[abcd] === [a-d] -  
[^xyz] | [^a-c]:匹配除方括号中字符的任何字符,例:[^abc]匹配"bcaqh"中的q(^也可以表示输入的开始) -  
.:匹配除行终止符之外的任何单个字符:\n,\r,\u2028,\u2029例如:/.y/ 在"yes make my day"中匹配 my 和 ay,而不是 yes -  
\d:等同于[0-9],匹配任何数字, `/\d/ === /[0-9]/ -  
\D:等同于[^0-9],匹配任何非数字的字符 -  
\w:等同于[A-Za-z0-9_],匹配基本拉丁字母中的任何字母数字字符 -  
\W:等同于[^A-Za-z0-9_],匹配除基本拉丁字母中的任何字母数字字符的字符,例:%,& -  
\s:匹配单个空白字符。\f \n \r \t \v ……,例:/\s\w*/匹配"say hi"中的"hi" -  
\S,匹配一个非空白字符 -  
\t:水平制表符 -  
\r:回车符 -  
\n:换行符 -  
\v:垂直制表符 -  
\f:换页符 -  
\:转义后面的字符比如匹配 *,需要在 * 前加 \ => /\a\*/ 匹配到 "a*" 比如匹配 \,需要/\\/,使用前一个 \ 转义后一个 \ 来匹配后一个 \ -  
a|b:匹配a或b,管道符(|)分隔部分表示可选项,[ab]也可以匹配方括号内任何字符 
 -  
 -  
量词:
x* | x{0,}:表示前一项x出现 0 次或者多次x+ | x{1,}:表示前一项x出现 1 次或者多次x? | x{0,1}:表示前一项x出现 0 次或者 1 次x{n}:表示前一项x匹配n次x{n,}:表示前一项x至少匹配n次,至多不限x{n,m}:表示前一项x至少匹配n次,至多匹配m次
 -  
标志:
g:全局搜索:不止搜索出第一个符合条件的项,会将所有符合条件的都搜索到i:不区分大小写m:多行搜索s:允许.匹配换行符u:使用unicode码的模式进行匹配y:执行”粘性(sticky)搜索,匹配从目标字符串的当前位置开始“- 例如:不区分大小写 
- 字面量:
/d*/i - 构造函数:
new RegExp("d*", "i") 
 - 字面量:
 
 
正则方法:
使用范围:
RegExp:exec:一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)test:一个在字符串中测试是否匹配的RegExp方法,它返回true或false
String:match:一个在字符串中执行查找匹配的String方法,它返回一个数组,在未匹配到时会返回nullmatchAll:一个在字符串中执行查找所有匹配的String方法,它返回一个迭代器(iterator)replace:一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。search:一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1split:一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法
混淆点:
-  
/a\+b/ === new RegExp("a\\+b")因为在字符串中,一个
\代表转义字符,所以在字符串中:- 使用
"a\+b"的话,其实就是将普通的*进行了转义,所以new RegExp("a\+b") === /a+b/, - 使用
"a\\+b"的话,就是将普通的+转义为特殊字符后,再转义为普通字符,所以new RegExp("a\\+b") === /a\+b/ 
 - 使用
 -  
new RegExp("a\+b") === new RegExp("a+b") === /a+b/因为在
JavaScript字符串中,反斜线\作为转义字符,所以在字符串中使用反斜杠会影响字符串的解释,例如:\n换行符,\t制表符等- 使用
"a\+b"的话,\+会被解释为一个普通的+ - 使用
"a+b",输出同样是"a+b" 
console.log("a\+b") // 输出:a+b console.log("a+b") // 输出:a+b所以实际上输出都是
a+b。因此,将这样的字符串传递给new RegExp()构造函数时,都会生成/a+b/的正则。 - 使用
 
在文字的编织中,正则表达式是你的神奇魔杖。让我们一起握紧这把魔杖,探索文本世界的奥秘,创造出更美好的故事!