1.RegExp 类型
ECMAScript 通过 RegExp 类型反对正则表达式。
let expression = /pattern/flags;
pattern(模式)是任何正则表达式,正则表达式能够带零个或多个 flags。
常见 修饰符(标记)
修饰符 形容
g 全局匹配查找所有匹配项
i 疏忽大小写
m 使边界字符 ^ 和 $ 匹配每一行的结尾和结尾,记住是多行,而不是整个字符串的结尾和结尾。
y 粘附模式,示意只匹配以 lastIndex 为结尾的字符串。(主动开启全局模式)
s 默认状况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中蕴含换行符 \n。
例子:
// 匹配所有以 ”at” 结尾的三字符组合,疏忽大小写
let pattern = /.at/gi;
注:匹配元字符须要本义
1.1RegExp 构造函数
正则表达式 也能够应用 RegExp 构造函数来创立,它接管两个参数:模式字符串和(可选的)标记字符串。
let pattern1 = /[bc]at/i;
// 跟 pattern1 一样,只不过是用构造函数创立的
let pattern2 = new RegExp(“[bc]at”, “i”);
留神:因为 RegExp 的模式参数是字符串,所以在某些状况下须要二次本义。具体做法是对字面量中的每个反斜杠后面再加一个反斜杠
1.2 实例属性
每个 RegExp 都有用于模式信息的实例属性。
属性 形容
global、ignorCase、sticky、unicode、multiline、dotAll 布尔值。别离判断是否设置了 g、i、y、u、m、s 标记
lastIndex 示意在源字符串中下一次搜寻的开始地位,始终从 0 开始
source 表达式字面量字符串(去掉开始和结尾斜杠)
flags 标记信息字符串
1.3 实例办法
① exec()
只接管一个参数,即要利用模式的字符串。
如果找到了匹配项,则返回蕴含第一个匹配信息的数组;如果没找到匹配项,则返回 null。
返回的数组尽管是 Array 的实例,但蕴含两个额定的属性:index 和 input。
index:匹配到字符串的起始地位。
input:要查找的字符串
这个数组的第一个元素是匹配整个模式的字符串,其余元素是与表达式中的捕捉组匹配的字符串。如果模式中没有捕捉组,则数组只蕴含一个元素。
let text = “cat,bat”;
let pattern = /([bc])at/i;
let matches = pattern.exec(text);
//[“cat”, “c”, index: 0, input: “cat,bat”, groups: undefined]
console.log(matches[0]); // “cat”
console.log(matches[1]); // “c”
console.log(matches.lastIndex); // 没有应用全局匹配,永远为 0
如果在这个模式上设置了 g 标记,则每次调用 exec()都会在字符串中向前搜寻下一个匹配项,如上面的例子所示:
let text = “cat,bat”;
let pattern = /([bc])at/gi;
let matches = pattern.exec(text);
//[“cat”, “c”, index: 0, input: “cat,bat”, groups: undefined]
console.log(matches.lastIndex); // 3
pattern.exec(text);
//[“bat”, “b”, index: 4, input: “cat,bat”, groups: undefined]
console.log(matches.lastIndex); // 7
pattern.exec(text);
//null
console.log(matches.lastIndex); // 0
注:如果模式设置了粘附标记 y,则每次调用 exec()就只会在 lastIndex 的地位上寻找匹配项。(主动开启全局模式)
如果匹配中途完结,能够通过调整 lastIndex 的属性值复原匹配。
② test()
接管一个字符串参数。如果输出的文本与模式匹配(齐全匹配),则参数返回 true,否则返回 false。
当咱们只关怀是否匹配时能够应用 test()。
③ 其余办法
toLocaleString() 和 toString():返回其字面量的字符串示意。
let r = /([bc])at/iy;
console.log(r.toString()); // “/([bc])at/iy”
valueOf():返回正则表达式自身
2.4 构造函数属性(动态属性)
RegExp 也有几个动态属性 但不罕用。略
2. 字符串匹配
1.match()
实质与 RegExp 的 exec() 办法雷同。办法接管一个参数:正则表达式对象,或表达式字符串
let text = “cat,bat”;
let pattern = /(.)at/i;
let matches = text.match(pattern)
//let matches = pattern.exec(text); 等价
//[“cat”, “c”, index: 0, input: “cat,bat”, groups: undefined]
console.log(matches[0]); // “cat”
console.log(matches[1]); // “c”
console.log(matches.lastIndex); // 没有应用全局匹配,永远为 0
2.search()
查找模式,办法接管一个参数:正则表达式对象,或表达式字符串。返回模式第一个匹配的地位索引,如果没找到则返回 -1。
let text = “cat, bat, sat, fat”;
let pos = text.search(/at/);
console.log(pos); // 1
3.replace()
用于替换字符串,办法接管两个参数,第一个参数为 RegExp 对象或字符串、第二个参数为字符串或函数。
第一个参数为字符串则只会替换第一个字符串,如果全副替换,正则表达式必须带全局标记。
第二个参数是字符串时有几个特殊字符,可用来示意匹配到的值
$n:n 为 0 -9,$1 示意第一个捕捉组的字符串
let text = “bat, cat, fat, tat”;
let pattern = /(.)at/g;
let result = text.replace(pattern,”$1$1″); //$1 示意分组 1 也就是 at 后面的字符
console.log(result); //”bb, cc, ff, tt”
第二个参数是函数,函数会接管三个参数:匹配的整个字符串、匹配索引、整个字符串。(多个捕捉组会传屡次)。
函数应该返回一个字符串,示意替换内容。
function htmlEscape(text) {
return text.replace(/[<>"&]/g,
function(match, pos, originalText) {switch(match) {
case "<":
return "<";
case ">":
return ">";
case "&":
return "&";
case "\"":
return """;
}
});
}
console.log(htmlEscape(“<p class=\”greeting\”>Hello world!</p>”));
// “<p class=”greeting”>Hello world!</p>”
4.split()
用于将字符串宰割为数组,第一个参数能够是 RegExp 对象或字符串,第二个可选参数用于指定数组最大大小。
let colorText = “red,blue,green,yellow”;
let colors1 = colorText.split(“,”);
// [“red”, “blue”, “green”, “yellow”]
let colors2 = colorText.split(“,”, 2);
// [“red”, “blue”]
let colors3 = colorText.split(/1+/);
// [“”, “,”, “,”, “,”, “”] 如果分隔符在结尾和结尾呈现,数组的前后就会呈现空字符串元素
- , ↩