js正则表达式学习与总结(必看)
(推荐)JS正则知识点专题://www.jb51.net/article/139831.htm
最近,在做一个小项目时,使用了常规匹配。感觉有规律,好用,所以打算抽时间做个小总结。正则表达式是一种文本模式,包括普通字符(例如,A和Z之间的字母)和特殊字符(称为“元字符”)。模式描述了搜索文本时要匹配的一个或多个字符串。RegExp对象表示一个正则表达式,这是一个对字符串执行模式匹配的强大工具。正则表达式是一种搜索和字符串替换操作。
创建新的正则表达式
方法1:直接数量语法
var reg=/模式/属性
方法2:创建RegExp对象的语法
var reg=new RegExp(模式,属性);
参数描述:
参数模式是一个字符串,它指定正则表达式或其他正则表达式的模式。参数属性是包含属性“g”、“I”和“m”的可选字符串,分别用于指定全局匹配、区分大小写匹配和多行匹配。ECMAScript标准化之前不支持m属性。如果pattern是正则表达式,而不是字符串,则必须省略此参数。
两者的区别如下:1 .使用直接量语法新创建的正则表达式对象会在编译代码时生成,这是常见开发中常见的方式;2.由构造函数生成的常规对象应该在代码运行时生成。
正则表达式的使用:正则对象的方法使用如下:RegExp对象。方法(字符串)字符串对象的方法使用如下:字符串。方法(RegExp对象)
正则对象的属性和方法
属性
IgnoreCase返回一个布尔值,该值指示RegExp对象是否有标志。iglobal返回一个布尔值,该值指示RegExp对象是否有标志。gmultiline返回一个布尔值,该值指示RegExp对象是否有标志m,LastIndex是一个整数,用于标识下一个匹配开始的字符位置。source返回正则表达式的源文本(不包括反斜杠)
我执行不区分大小写的匹配
g .执行全局匹配(查找所有匹配,而不是在找到第一个匹配后停止)。m执行多行匹配正则表达式的功能
通常用于两个任务:
1.当使用验证进行验证时,通常需要在前后添加$和$来匹配要验证的整个字符串。
2.搜索替换时是否添加此限制取决于搜索的要求。此外,还可以在前后添加\b而不是$和。
字符类匹配
[……]查找方括号之间的任何字符【……】查找不在方括号之间的任何字符[a-z]查找小写A到小写Z的任何字符[A-Z]查找大写A到小写Z的任何字符.查找单个字符,除了换行符和行结束符\w,相当于[a-zA-Z0-9]\W查找非单词字符,相当于[a-za-z0-9] \S查找空白字符,相当于[0-9] \d查找非数字字符,相当于[0-9
重复字符匹配
{n,m}至少匹配前一项n次,但不超过m次{n,}匹配前一项n次或更多{n}匹配前一项n次n?匹配前一项0次或1次,这意味着前一项是可选的,这相当于{0,1} n次匹配前一项1次或更多次,相当于{1,}n*次匹配前一项0次或更多次,相当于{0,}n$匹配任何以n结尾的字符串匹配任何以n开头的字符串?=n匹配任何紧跟在指定字符串n后面的字符串?匹配任何不紧跟在指定字符串n后面的字符串
匹配特定的数字
[1-9] \ d * $匹配正整数-[1-9] \ d * $匹配负整数-?[0-9]\d*$匹配整数[1-9] \ d * | 0 $匹配非负整数(正整数0)-[1-9] \ d * | 0 $匹配非正整数(负整数0) [1-9] \ d *。\ d *。([1-9]\d*。\d*|0。\d*[1-9]\d*|0? 0 | 0) $匹配的浮点数[1-9] \ d *。\ d * | 0。\ d * [1-9] \ d * | 0? 0 | 0 $匹配非负浮点数(正浮点数0)(-([1-9])\ d *。\ d * | 0。\ d *[1-9]\ d *)| 0? 0 | 0 $匹配非正浮点数(负浮点数0)
匹配特定字符串
[a-za-z] $匹配由26个英文字母组成的字符串[a-z] $匹配由26个大写英文字母组成的字符串[a-za-z0-9] $匹配由数字和26个英文字母组成的字符串\ w
方法
检测方法
检索字符串中指定的值。返回真或假。如果字符串包含匹配RegExpObject的文本,则为True,否则为false。
演示1:
如果正则表达式有g修饰符,每个测试方法将从最后一个匹配结束的位置开始匹配。
使用带有G修饰符的正则表达式,这意味着应该记录每个搜索的位置。然后,使用测试方法,每次开始搜索的位置是最后一次匹配后的位置。
!doctype html head metharset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title test method/title/head body script type=' text/JavaScript ' varreg=/ABC/g;var str=' 123abc456abcconsole . log(reg . LastIndex);//0 console . log(reg . test(str));//true console . log(reg . LastIndex);//6 console . log(reg . test(str));//true console . log(reg . LastIndex);//12 console . log(reg . test(str));//false/script/body/html demo 2:
如果正则表达式是空字符串,它将匹配所有字符串,但是您需要使用新的RegExp()方法
!doctype html head metharset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title test method/title/head body script type=' text/JAVAScript ' console . log(new regexp(')。test(' ABC ')//true console . log(/' '/)。测试(' ABC ');//false console.log(/''/)。测试(“”);//true /script/body/htmlexec方法
exec()方法用于检索字符串中正则表达式的匹配项。
返回存储匹配结果的数组。如果没有找到匹配项,返回值为空。
演示1:
!doctype html head metharset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title xec method/title/head body script type=' text/JavaScript ' varstr=' XYZ ';var reg 1=/x/;var reg 2=/a/;var res1=reg 1 . exec(str);var res2=reg 2 . exec(str);console . log(res1);//['x ',index: 0,input 3360 ' XYZ ']console . log(res2);//null/script/body/html demo 2:
如果正则表达式包含括号,则返回的数组将包含多个元素。第一个是匹配成功的结果,后面是括号中匹配成功的结果。如果有多个括号,它们成功匹配的结果将成为数组元素
!doctype html head metharset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title exec方法2/title/headbody脚本类型=' text/JAVAScript ' varstr=' ABC ABC ';var reg=/(a)b(c)/;var RES=reg . exec(str);console . log(RES);//['ABC ',' a ',' c ',索引: 0,输入: ' abcdab ']/script/body/html对于调用exec方法后返回的数组有以下两个属性:
输入要匹配的整个字符串索引。整个模式匹配成功的起始位置支持正则表达式String对象的方法
搜索方法
search()方法用于检索字符串中的指定子字符串或与正则表达式匹配的子字符串。
返回值:stringObject中第一个匹配regexp的子字符串的起始位置。
注意:如果没有找到匹配的子字符串,则返回-1。
search()方法不执行全局匹配,它忽略标志g .它还忽略regexp的lastIndex属性,并且总是从字符串的开头进行检索,这意味着它总是返回stringObject的第一个匹配位置。
Demo:
!doctype html head metharset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title search方法/title/header dyscript type=' text/JavaScript ' varstr=' abcdcef ';console . log(str . search(/c/g));//2 /script/body/htmlmatch方法
match()方法可以检索字符串中的指定值,或者查找一个或多个正则表达式的匹配项。该方法类似于indexOf()和lastIndexOf(),但它返回指定的值,而不是字符串的位置。
字符串对象的匹配方法类似于常规对象的执行方法:
但是,如果正则表达式有G修饰符,匹配方法就不同于exec方法。
您可以看到match返回了所有成功匹配的结果,但是exec方法只返回了一个。Demo:
!doctype html head metharset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title match方法/title/headbody脚本类型=' text/JavaScript ' varstr=' ABCD ';var reg 1=/a/;var reg 2=/x/;console . log(str . match(reg1));//['a ',index: 0,input 3360 ' ABCD ']console . log(str . match(reg2));//null var str=' abcdab c ';var reg=/a/g;console . log(str . match(reg));//['a ',' a ']console . log(reg . exec(str));//['a ',索引: 0,输入: ' abcdab ']/script/body/html replace方法
replace()方法用于将字符串中的某些字符替换为其他字符,或者替换与正则表达式匹配的子字符串。
返回值:用替换替换regexp的第一个匹配项或所有匹配项后获得的新字符串。
stringObject的replace()方法执行查找和替换的操作。它将在stringObject中找到匹配正则表达式的子字符串,然后用替换来替换这些子字符串。如果regexp有全局标志g,replace()方法将替换所有匹配的子字符串。否则,它只替换第一个匹配的子字符串。
Demo:
!doctype html head metharset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title replace method/title/head discript type=' text/JavaScript ' varstr=' XXX ';console.log(str.replace('x ',' y '));//yxx console . log(str . replace(/x/,' y ');//yxx console . log(str . replace(/x/g,' y ');//yyy /script/body/htmlreplace方法替换特殊字符
Demo:
!doctype htmlhead metaccharset中的特殊字符替换=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title replace/title/head dy script type=' text/javascript '//被子表达式替换:$1和$2 /()是正则表达式中的子表达式,$1对应第一个表达式即Java的内容,$2是script var str=' javascriptconsole . log(str . replace)(/(Java)(script)/,' $ 2 $ 1 ');//输出:scriptjava //$是正则表达式匹配的字符串//正则表达式匹配的是直接java,如果匹配的结果是java,那么$的值就是java,然后匹配的字符串var str1='javascript '替换为字符串$-;console . log(str 1 . replace(/Java/,' $-');//输出:Java-script var str 2=' JavaScript ';//$ `是匹配子串ava的左文本,那么就是jconsole . log(str 2 . replace(/ava/,' $ ` ');//输出:jjscript //$ '是匹配子字符串ava的右侧文本,然后是script console . log(str 2 . replace(//ava/,' $ ');//输出:jscriptscript //$$是直接数量符号,即插入一个$符号console . log(str 2 . replace(//ava/,' $ $ ');//输出:j $ script/script/body/html replace的参数替换是一个函数
Match匹配整个字符串,即XYZ 45678% $ a1是第一个子表达式,([\ d] *),匹配0个或0个以上非数字字符,即:xyza2是第二个子表达式,(\d*),匹配0个或0个以上数字,即45678a3是第三个子表达式,([相当于[a-za-z0-9 _],即% $ index是模式匹配发生的位置。如果第一个字符匹配成功,则位置为0。String就是字符串本身,也就是XYZ 45678% $
Demo:
!doctype html head metharset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title replace的替换参数是function/title/head dy脚本类型=' text/JavaScript ' function replacer(match,a1,a2,a3,index,string) { return [a1,a2,a3]。join(' ~ ');} var str='xyz45678%$^';var reg=/([^\d]*)(\d*)([^\w]*)/var RES=str . replace(reg,replacer);console . log(RES);//XYZ ~ 45678 ~ % $/script/body/html split方法
Split('字符串被有规律地划分','返回数组成员的最大数量');返回除法后每个部分组成的数组Demo:
!doctype html head metharset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title split方法/title/headbody脚本类型=' text/JavaScript' var str=' a,b,c,d ';var res=str.split(',');//使用逗号分隔字符串console . log(RES);//['a ',' b ',' c ',' d'] var str1='a,b,c,d ';var res1=str1.split(/,*/);//用0个或更多逗号分隔字符串console.log(res1 );//['a ',' b ',' ',' ',' c ',' d'] var str2='a,b,c,d ';var res2=str2.split(/,*/);//用0或逗号分隔字符串console . log(res2);//['a ',' b ',' c ',' d'] var str3='a,b,c,d ';var res3=str3.split(/,*/,2);//用0或逗号分隔字符串,并限制返回数组中两个console.log(res3 (RES 3)的最大数量;//['a ',' b'] /script/body/html可以将常规匹配规则转换为段字符串。
下面的常规匹配规则是除以0或大于x,如果添加了括号,括号的匹配部分,即除法规则,也将作为数组成员返回。
演示2:
!doctype html head meta charset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title split方法2/title/head dy脚本类型=' text/JavaScript ' var str='[email protected]@[email protected]@ @ ';var RES=str . split(/x */);//以0或x作为分隔符的console.log(res );//[' '、“@”、“@”、“@”、“@”、“@”、“@”]var res1=str . split(/(x *)/);//如果加上圆括号,圆括号的匹配部分,也就是分区规则,也会作为数组成员返回到console . log(res1);//某些应用程序的['',' x ',' @ ',' ',' @ ',' xx ',' @ ',' xx ',' @ ',' ' @']/script/body/html正则表达式
1.字符串中出现频率最高的字符
var re=/(\ w)\ 1/g;(\w)外的括号表示分组,\1表示重复第一个分组中的内容,\1表示匹配的字符被重复n次,下面的G表示执行所有替换
str.replace的第二个参数是一个函数。参数A表示整个匹配字符串,参数B表示第一个捕获组是重复的单个字符。将a.length与记录的最大重复次数进行比较。如果a.length较大,将其赋给num,并用值记录重复字符B。这个函数返回替换文本,但是这里没有返回值,也就是说用null替换,每次都会执行这个函数。
!doctype htmlhead元字符集=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title string/title/headlodyscript type=' text/JAVAScript ' varstr=' mmmmaammmmbbbbsccc ';函数most(str){ var arr=str . split(');str=arr.sort()。join(' ');//将字符串除以单个字符,然后对它们进行排序和组合。在这一步之后,相同的字符将被排列在一起。var reg=/(\ w)\ 1/g;var num=0;var值=' ';str.replace(reg,function (a,b)){//console . log(a);if(numa . length){ num=a . length;值=b;} });出现“return”次数最多的字符是“value”,它出现“num”次;} console . log(most(str));/script/body/html2。从URL中提取子域
!doctype html head metharset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title从URL/title/head discript中提取子域type=' text/JAVAScript ' varurl=' http://www。ABC.com ';/[^.] /;//匹配除。var RES=reg。exec (URL) [0]。substr(7);console . log(reg . exec(URL));//['http://www ',index: 0,input : ' http://www . ABC.com ']console . log(RES);//www /script/body/html3。向字符串中添加数千个字符
!doctype html head meta charset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title将数千个字符添加到字符串/title/head正文脚本类型=' text/JavaScript ' var str=' 12345678912312 ';函数fn(str){ var reg=/(?=(?b)(\ d { 3 })$)/g;return str.replace(reg,',');} var RES=fn(str);console . log(RES);//12,345,678,912,312/script/body/htmlcommon正则表达式
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
如0511-4405222或021-87888822
匹配的QQ号码:[1-9][0-9]{4,}
从一万开始
邮政编码:[1-9]\d{5}(?\d)
邮政编码是6位数字
匹配身份证:/(\ d {14} | \ d {17}) (\ d | [xx]) $/
匹配规则:身份证号码有15位或18位,最后一位可以是X,其他都是数字
匹配的ip地址:\ D. \ D. \ D. \ D
匹配账号是否合法(字母开头,允许5-16字节,允许字母数字下划线):[a-za-z] [a-za-z0-9 _] {4,15} $在验证表单时非常实用
匹配汉字:/[\u4E00-\u9FA5\uf900-\ufa2d]/
要使用Unicode,必须以\u开头,然后是字符编码的四位十六进制表示
匹配电子邮件地址:
/^([a-za-z_0-9-])[emailprotected]([a-za-z_0-9-】)(。[a-zA-Z_0-9-]) $/
邮箱的规则是:由3部分组成
它由1个或多个字母数字下划线和横条组成@ 1个或多个字母数字下划线和横条。1个或多个字母数字下划线和横条
匹配网址:[a-za-z] ://[\ s] *
判断字符串是否由数字:/\ d * $/组成
在受限文本框中只能输入数字和小数点(两个小数点):
/^\d*.\d{0,2}$/
描述:开头有0个或多个数字。(?这意味着匹配前一项0次或更多次。中间有0或1个小数点,小数点后有0或最多2位数字
用户名是常规的:/[\ u4e 00-\ u9 fa 5 \ uf900-\ ufa2d \ w]{ 4,16} $/
匹配规则:只有中文、英文、数字、下划线、4-16个字符
匹配汉字规则:/[\u4E00-\u9FA5\uf900-\ufa2d]/
\w是匹配英语、数字和下划线
匹配英文地址:/[a-za-z] [。a-za-z \ s,0-9] *?[a-zA-Z]/匹配规则:包含点、字母、空格、逗号和数字,但开头和结尾必须是字母分析:开头必须是字母,可以这样写/[azaz]/结尾必须是字母,可以这样写:/[azaz]/
中间有点、字母、空格、逗号和数字的规则:/[。a-zA-Z\s,0-9]*?/
外面有0个以上*号,后面有问号?代表性是可选的;有就配,没有就不配;
匹配价格:/\ d *。\ d {0,2})?$/
匹配规则:的开头有0个或更多的数字,中间有一个小数点,后面有0-2个小数点
单词的首字母大写为:/\ b (\ w) | \ s (\ w)/g。
验证日期的格式为:/\ d {4} [-\/] \ d {1,2} [-\/] \ d {1,2} $/
有两种日期格式。第一个是yyyy-mm-dd或yyyy/mm/dd
分析:个月和天可以有1或2位数
以上就是边肖带来的js正则表达式学习和总结(必看文章)的全部内容。希望大家多多支持我们~
版权声明:js正则表达式学习与总结(必看)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。