🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 12.2 用于模式匹配的String方法 String支持4种使用正则表达式的方法。 ||| ||| | search() | 按照给定的正则表达式进行搜索,返回一个整数,表示第一个与之匹配的字符串的起始位置,如果找不到匹配的子串,将返回-1。| | match() | 返回一个数组,成员是所有匹配的子字符串。| | replace() | 按照给定的正则表达式进行替换,返回替换后的字符串。| | split() | 按照给定规则进行字符串分割,返回一个数组,包含分割后的各个成员。| **1.search()** 按照给定的正则表达式进行搜索,返回一个整数,表示第一个与之匹配的字符串的起始位置,如果找不到匹配的子串,将返回-1。 ~~~ "javascript".search(/script/i); ~~~ 上面的代码的返回值为4 如果search()的参数不是正则表达式,则首先会通过RegExp构造函数将它转换成正则表达式,search()方法不支持全局检索,因为它忽略正则表达式参数中的修饰符g。 **2.match()** match()方法的唯一参数是一个正则表达式,返回的是一个由匹配结果组成的数组。如果该正则表达式设置了修饰符g,则返回的数组包含字符串中的所有匹配结果。 '1 plus 2 equals 3'.match(/\d+/g) //返回["1","2","3"] 返回来的数组还带有另外两个属性:index和input,分别表示包含发生匹配的字符位置和引用的正在检索的字符串。 **3.replace()** replace()方法用以执行检索与替换操作。其中第一个参数是一个正则表达式,第二个参数是要进行替换的字符串。 如果replace()的第一个参数是字符串而不是正则表达式,则replace()将直接搜索这个字符串,而不会像search()一样首先通过RegExp()将它转换为正则表达式。 replace方法的第二个参数可以使用美元符号$,用来指代所替换的内容。 $& 指代匹配的子字符串。 ~~~ $` 指代匹配结果前面的文本。 $' 指代匹配结果后面的文本。 $n 指代匹配成功的第n组内容,n是从1开始的自然数。 $$ 指代美元符号$。 ~~~ 比如: ~~~ 'hello world'.replace(/(\w+)\s(\w+)/, '$2 $1') // "world hello" ~~~ replace方法的第二个参数还可以是一个函数,将每一个匹配内容替换为函数返回值。 ~~~ 'abca'.replace(/a/g,function(match){ return match.toUpperCase(); }); // "AbcA" ~~~ replace()方法的第二个参数可以接受多个参数。第一个参数是捕捉到的内容,第二个参数是捕捉到的组匹配(有多少个组匹配,就有多少个对应的参数)。 **4.split()** split()方法用以将调用它的字符串拆分为一个子串组成的数组。 ~~~ '123,456,789'.split(',') //返回["123","456","789"] ~~~ split()方法的参数也可以是一个正则表达式。 ## 12.3 RegExp对象 RegExp()构造函数带有两个字符串参数,第二个参数是可选的,它指定正则表达式的修饰符(可传入修饰符g、i、m或者它们的组合);第一个参数包含正则表达式的主体部分,也就是正则表达式直接量中两条斜线之间的文本。 ~~~ var regexp = new RegExp('\\d{5}','g') ~~~ 上面的代码表示会全局的查找5个数字。 ### 12.3.1RegExp对象的属性 每个RegExp对象都包含5个属性: ||| |||| | source | 只读字符串,包含正则表达式的文本| | global | 只读布尔值,用以说明这个正则表达式是否带有修饰符g| | ignoreCase | 只读布尔值,用以说明正则表达式是否带有修饰符i| | multiline | 只读布尔值,用以说明正则表达式是否带有修饰符m| | lastIndex | 可读写的整数,如果匹配模式带有g修饰符,这个属性存储在整个字符串中下一次检索的开始位置。| ### 12.3.2 RegExp的方法 RegExp对象定义了两个用于执行模式匹配操作的方法。 **1.exec()** 正则对象的exec方法,可以返回匹配结果。如果发现匹配,就返回一个数组,成员是每一个匹配成功的子字符串,否则返回null。 ~~~ /a|b|c/.exec('abc') // ["a"] /a|b|c/.exec('qwe') // null ~~~ **2.test()** 正则对象的test方法返回一个布尔值,表示当前模式是否能匹配参数字符串。 ~~~ var s = /a/g; var a = 'baba'; s.lastIndex //0 s.test(a); //true s.lastIndex; //2 s.test(a); //true ~~~ 注意:如果正则表达式带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配,也可以通过正则对象的lastIndex属性指定开始搜索的位置。