模式匹配
回想一下,JavaScript权威指南(第6版) --- 自学笔记(五)中,曾经写过一个字符串的replaceAll方法:
String.prototype.replaceAll = function(searchVal, repalceVal) {
return this.replace(new RegExp(searchVal, "gm"), repalceVal);
}
JS定义了RegExp()构造函数,用来创建表示文本匹配模式的对象,这些模式称为正则表达式 (regular expression)。
JS采用Perl中的正则表达式语法。
RegExp并不是JS的基本类型,和Date一样,它只是一种具有实用API的特殊对象。
RegExp一样具有直接量写法,可以直接在js程序中使用,
在两条斜线之间的文本构成了一个正则表达式直接量,第二条斜线之后也可以跟随一个或多个字母,用来修饰匹配模式的含义。
/^HTML/; // 匹配以HTML开始的字符串
/[1-9][0-9]*/; // 匹配一个非零数字,后面是任意个数字
/\bjavascript\b/i; // 匹配单词"javascript",忽略大小写
RegExp对象定义了很多有用的方法,字符串同样具有可以接受RegExp参数的方法,如下:
var str = "testing: 1, 2, 3";
var pattern = /\d+/g; // 匹配所有包含一个或者多个数字的实例
console.log(pattern.test(str)); // true
console.log(pattern.test("abc")); // false
console.log(str.search(pattern)); // 9,首次匹配成功的位置
console.log(str.match(pattern)); // ["1", "2", "3"],所有匹配组成的数组
console.log(str.replace(pattern, "#")); // testing: #, #, #,替换匹配的字符
console.log(str.split(/\D+/)); // ["", "1", "2", "3"],使用非数字字符截取字符串