当前位置: 首页 > Web前端 > JavaScript

JS中的正则表达式_0

时间:2023-03-27 16:59:37 JavaScript

1.RegExp类型ECMAScript通过RegExp类型支持正则表达式。让表达式=/模式/标志;pattern(模式)是任何正则表达式,正则表达式可以有零个或多个标志。常用修饰符(标签)修饰符说明g全局匹配查找所有匹配i忽略大小写m使边界字符^和$匹配每行的开头和结尾,记住多行,而不是整个字符串的开头和结尾。y粘合模式,即只匹配以lastIndex开头的字符串。(自动开启全局模式)s默认点。就是匹配除换行符\n以外的任意字符,加上s修饰符后,.包含换行符\n。示例://匹配所有以“at”结尾的三字符组合,忽略大小写letpattern=/.at/gi;注意:匹配的元字符需要转义1.1RegExp构造函数正则表达式也可以使用RegExp构造函数来创建,它有两个参数:模式字符串和(可选)标志字符串。letpattern1=/[bc]at/i;//与pattern1相同,但使用构造函数创建letpattern2=newRegExp("[bc]at","i");注意:由于RegExp的pattern参数是字符串,所以在某些情况下需要双重转义。具体方法是在字面量的每个反斜杠前加一个反斜杠。1.2实例属性每个RegExp都有模式信息的实例属性。属性描述global,ignoreCase,sticky,unicode,multiline,dotAllBoolean。判断是否分别设置了g,i,y,u,m,s标志位。lastIndex表示下一次查找在源字符串中的起始位置,始终从0开始应用模式的字符串。如果找到匹配项,则返回包含有关第一个匹配项的信息的数组,如果未找到匹配项,则返回null。尽管返回的数组是Array的一个实例,但它包含两个附加属性:index和input。index:匹配到字符串的起始位置。输入:要查找的字符串。这个数组的第一个元素是匹配整个模式的字符串,其他元素是匹配表达式中捕获组的字符串。如果模式中没有捕获组,则数组只包含一个元素。lettext="cat,bat";letpattern=/([bc])at/i;letmatches=pattern.exec(text);//["cat","c",index:0,input:"cat,bat",groups:undefined]console.log(matches[0]);//“猫”console.log(matches[1]);//"c"console.log(matches.lastIndex);//不使用全局匹配,始终为0如果在此模式上设置了g标志,则每次调用exec()都会在字符串中向前搜索下一个匹配项,如下例所示:lettext="cat,bat”;让pattern=/([bc])at/gi;让matches=pattern.exec(text);//[“cat”,“c”,索引:0,输入:“cat,bat”,组:undefined]console.log(matches.lastIndex);//3pattern.exec(text);//["bat","b",index:4,input:"cat,bat",groups:undefined]console.log(matches.lastIndex);//7pattern.exec(text);//nullconsole.log(matches.lastIndex);//0注意:如果模式设置了粘性标志y,则每次调用exec()时,它只会在lastIndex位置寻找匹配项。(自动开启全局模式)如果匹配中途结束,可以通过调整lastIndex的属性值来恢复匹配。②test()接收一个字符串参数。如果输入的文本与模式匹配(完全匹配),则该参数返回true,否则返回false。当我们只关心匹配时可以使用test()。③其他方法toLocaleString()和toString():返回其字面值的字符串表示。让r=/([bc])at/iy;console.log(r.toString());//"/([bc])at/iy"valueOf():返回正则表达式本身2.4构造函数属性(StaticAttributes)RegExp也有几个静态属性但是不常用。略2.字符串匹配1.match()本质上和RegExp的exec()方法是一样的。该方法接收一个参数:一个正则表达式对象,或者一个表达式字符串lettext="cat,bat";letpattern=/(.)at/i;letmatches=text.match(pattern)//letmatches=pattern.exec(文本);等价的//["cat","c",index:0,input:"cat,bat",groups:undefined]console.log(matches[0]);//“猫”console.log(matches[1]);//"c"console.log(matches.lastIndex);//没有使用全局匹配,一直搜索pattern02.search()。该方法接收一个参数:一个正则表达式对象,或者一个表达式字符串。返回模式的第一个匹配项的位置索引,如果未找到则返回-1。lettext="cat,bat,sat,fat";letpos=text.search(/at/);console.log(pos);//13.replace()用于替换字符串,该方法接收两个参数,第一个参数是RegExp对象或字符串,第二个参数是字符串或函数。如果第一个参数是字符串,则只替换第一个字符串。如果全部替换,则正则表达式必须具有全局标记。当第二个参数为字符串时,有几个特殊字符可以用来表示匹配值$n:n为0-9,$1表示第一个捕获组的字符串lettext="bat,cat,fat,tat";设pattern=/(.)at/g;设result=text.replace(pattern,"$1$1");//$1表示第1组,也就是console.log(result)之前的那个字符;//"bb,cc,ff,tt"的第二个参数是一个函数,该函数会接收三个参数:匹配的整个字符串、匹配的索引、整个字符串。(多个捕获组会被多次传递)。该函数应返回表示替换内容的字符串。functionhtmlEscape(text){returntext.replace(/[<>"&]/g,function(match,pos,originalText){switch(match){case"<":return"<";case">":return">";case"&":return"&";case"\"":return""";}});}console.log(htmlEscape("Helloworld!

"));//"Helloworld!

"4.split()用于将字符串分割成数组,第一个参数可以是一个RegExp对象或字符串,第二个可选参数用于指定数组的最大大小。letcolorText="red,blue,green,yellow";letcolors1=colorText.split(",");//["red","blue","green","yellow"]letcolors2=colorText.split(",",2);//["red","blue"]letcolors3=colorText.split(/1+/);//["",",",",",",",""]如果分隔符出现在首尾,则数组前后都会有空字符串元素,?