js学习笔记:String中的模式匹配

来源:互联网 发布:怎么植入php一句话木马 编辑:程序博客网 时间:2024/06/07 00:47

String类型定义了几个用于在字符串中匹配模式的方法。

match

在字符串上调用这个方法,本质上与调用RegExp的exec()方法相同。
match()方法之接收一个参数:正则表达式或一个RegExp对象。

var text = "cat, bat, sat, fat";var pattern = /.at/;//与pattern.exec(text)相同var matches = text.match(pattern);matches.index;   //0matches[0];      //"cat"patern.lastIndex;//0

match( )方法返回一个数组,与调用pattern的exec方法返回的数组相同:第一项是与整个模式相匹配的字符串,之后的每一项保存着与正则表达式中的捕获组相匹配的字符串。

search

接受一个参数,与match方法相同:正则表达式或RegExp对象。
此方法返回字符串中第一个匹配项的索引;如果没有找到匹配项则返回-1。
而且search方法始终是从字符串开头向后查找模式。

var text = "cat, bat, sat, fat";var pos = text.search(/at/);alert(pos);  //1

replace

为了简化替换子字符串的操作,ECMAScript提供了replace方法。
此方法接收两个参数:

  • 一个RegExp对象或者一个字符串(这个字符串不会被转换成正则表达式)
  • 一个字符串或者一个函数

如果第一个参数是字符串那么只会替换第一个子字符串,要想替换所有子字符串,唯一的办法就是提供一个正则表达式,而且要指定全局标志g。

var text = "cat, bat, sat, fat";var result = text.replace("at","ond");alert(result);  //"cond, bat, sat, fat"result = text.replace(/at/g,"ond");alert(result);  //"cond, bond, sond, fond"

replace方法的第二个参数也可以是一个函数。
在只有一个匹配项的情况下,会向这个函数传递3个参数:

  • 模式的匹配项
  • 模式匹配项在字符串中的位置
  • 原始字符串

在正则表达式中定义了多个捕获组的情况下,传递给函数的参数依次是模式的匹配项、第一个捕获组的匹配项、第二个捕获组的匹配项……但最后的两个参数仍然分别是模式的匹配项在字符串中的位置和原始字符串。

这个函数应返回一个字符串,表示应该被替换的匹配项。
使用函数作为replace()方法的第二个参数可以实现更加精细的替换操作。

function htmlEscape(text){    return text.replace(/[<>"&]/g,function(match,pos,originalText){        switch(match){            case "<":                return "&lt;";            case ">":                return "&gt;";            case "&":                return "&amp;";            case "\"":                return "&quot;";        }    });}alert(htmlEscape("<div class=\"background-overlay fadein\"></div>"))//"&lt;div class=&quot;background-overlay fadein&quot;&gt;&lt;/div&gt;"

这个例子定义了一个对html进行转义的函数,正则表达式能够匹配4个字符,针对每个匹配的字符返回特定的HTML实体。

split

这个方法可以基于指定的分隔符将一个字符串分割成多个子字符串,并将结果放在一个数组中。
分隔符可以是字符串,也可以是一个RegExp对象。

split()方法可以接受可选的第二个参数,用于指定数组的大小,以便确保返回的数组不会超过既定大小。

var coloeText = "red,blue,green,yellow";var colors1 = colorText.split(",")//["red","blue","green","yellow"]var colors2 = colorText.split(",",2);//["red","blue"]var colors3 = colorText.split(/[^\,]+/);
0 0