字符串的模式匹配方法

来源:互联网 发布:linux udp端口禁用 编辑:程序博客网 时间:2024/05/17 01:53

String 类型定义了几个用于在字符串中匹配模式的方法。第一个方法就是 match() 在字符串上调用这个方法,本质上与调用 RegExp 的 exec() 方法相同。 match() 方法只接受一个参数,要么是一个正则表达式,要么是一个 RegExp 对象。来看下面的例子。


var text = “cat, bat, sat, fat”;

var pattern = /.at/;


//与pattern.exec(text)相同

var matches = text.match(pattern);

alert(matches.index); //0

alert(matches[0]); //“cat”

alert(pattern.lastIndex); //0


本例中的 match() 方法返回了一个数组;如果是调用 RegExp 对象的 exec() 方法并传递本例中的字符串作为参数,那么也会得到与此相同的数组:数组的第一项是与整个模式匹配的字符串,之后的每一项(如果有)保存着与正则表达式中的捕获组匹配的字符串。


另一个用于查找模式的方法是 search() 。这个方法的唯一参数与 match() 方法的参数相同:由字符串或 RegExp 对象指定的一个正则表达式。 search() 方法返回字符串中第一个匹配项的索引;如果没有找到匹配项,则返回 -1 。而且, search() 方法始终是从字符串开头向后查找模式。看下面的例子。


var text = “cat, bat, sat, fat”;

var pos = text.search(/at/);

alert(pos); //1


这个例子中的 search() 方法返回 1 ,即 “at” 在字符串中第一次出现的位置。


为了简化替换子字符串的操作,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() 方法的是字符串 “at” 和替换用的字符串 “ond”替换的结果是把 “cat” 变成了 “cond” ,但字符串中的其他字符并没有受到影响。然后,通过将第一个参数修改为带有全局标志的正则表达式,就将全部 “at” 都替换成了 “ond”


好了,今天的文章就到这里,本文由Web前端精髓为您提供,喜欢的同学记得点击收藏或者点赞哦!

原创粉丝点击