let expression = /pattern/flags;
? g :全局模式,表示查找字符串的全部内容,而不是找到第一个匹配的内容就结束。? i :不区分大小写,表示在查找匹配时忽略 pattern 和字符串的大小写。? m :多行模式,表示查找到一行文本末尾时会继续查找。? y :粘附模式,表示只查找从 lastIndex 开始及之后的字符串。? u : Unicode 模式,启用 Unicode 匹配。? s : dotAll 模式,表示元字符 . 匹配任何字符(包括 \n 或 \r )。
let pattern1 = /at/g;
let pattern2 = /[bc]at/i;
let pattern3 = /.at/gi;
( [ { \ ^ $ | ) ] } ? * + .
// 匹配第一个 "bat" 或 "cat" ,忽略大小写let pattern1 = /[bc]at/i;// 匹配第一个 "[bc]at" ,忽略大小写let pattern2 = /\[bc\]at/i;// 匹配所有以 "at" 结尾的三字符组合,忽略大小写let pattern3 = /.at/gi;// 匹配所有 ".at" ,忽略大小写let pattern4 = /\.at/gi;
// 匹配第一个 "bat" 或 "cat" ,忽略大小写let pattern1 = /[bc]at/i;// 跟 pattern1 一样,只不过是用构造函数创建的let pattern2 = new RegExp("[bc]at", "i");
/\[bc\]at/????????????????????????? "\\[bc\\]at"/\.at/????????????????????????????????"\\.at"/name\/age/????????????????????"name\\/age"/\d.\d{1,2}/???????????????????????"\\d.\\d{1,2}"/\w\\hello\\123/????????????????"\\w\\\\hello\\\\123"
const re1 = /cat/g;console.log(re1); // "/cat/g"const re2 = new RegExp(re1);console.log(re2); // "/cat/g"const re3 = new RegExp(re1, "i");console.log(re3); // "/cat/i"
-? global :布尔值,表示是否设置了 g 标记。-? ignoreCase :布尔值,表示是否设置了 i 标记。-? unicode :布尔值,表示是否设置了 u 标记。-? sticky :布尔值,表示是否设置了 y 标记。-? lastIndex :整数,表示在源字符串中下一次搜索的开始位置,始终从 0 开始。-? multiline :布尔值,表示是否设置了 m 标记。-? dotAll :布尔值,表示是否设置了 s 标记。-? source :正则表达式的字面量字符串(不是传给构造函数的模式字符串),没有开头和结尾的斜杠。-? flags:正则表达式的标记字符串。始终以字面量而非传入构造函数的字符串模式形式返回(没 有前后斜杠)。
let pattern1 = /\[bc\]at/i;console.log(pattern1.global); // falseconsole.log(pattern1.ignoreCase); // trueconsole.log(pattern1.multiline); // falseconsole.log(pattern1.lastIndex); // 0console.log(pattern1.source); // "\[bc\]at"console.log(pattern1.flags); // "i"let pattern2 = new RegExp("\\[bc\\]at", "i");console.log(pattern2.global); // falseconsole.log(pattern2.ignoreCase); // trueconsole.log(pattern2.multiline); // falseconsole.log(pattern2.lastIndex); // 0console.log(pattern2.source); // "\[bc\]at"console.log(pattern2.flags); // "i"
input???????????????????????? $_????????????????????????最后搜索的字符串(非标准特性)lastMatch???????????????? $&????????????????????????最后匹配的文本lastParen???????????????? $+????????????????????????最后匹配的捕获组(非标准特性)leftContext???????????????$`?????????????????????????input 字符串中出现在 lastMatch 前面的文本rightContext?????????????$'? ? ? ? ? ? ? ? ? ? ? ? ? nput 字符串中出现在 lastMatch 后面的文本
通过这些属性可以提取出与 exec()和 test()执行的操作相关的信息。来看下面的例子:
let text = "this has been a short summer";let pattern = /(.)hort/g;if (pattern.test(text)) {????????console.log(RegExp.input); // this has been a short summer????????console.log(RegExp.leftContext); // this has been a????????console.log(RegExp.rightContext); // summer????????console.log(RegExp.lastMatch); // short????????console.log(RegExp.lastParen); // s}
let text = "this has been a short summer";let pattern = /(.)hort/g;/** 注意: Opera 不支持简写属性名* IE 不支持多行匹配*/if (pattern.test(text)) {????????console.log(RegExp.$_); // this has been a short summer????????console.log(RegExp["$`"]); // this has been a????????console.log(RegExp["$'"]); // summer????????console.log(RegExp["$&"]); // short????????console.log(RegExp["$+"]); // s}
let text = "this has been a short summer";let pattern = /(..)or(.)/g;if (pattern.test(text)) {????????console.log(RegExp.$1); // sh????????console.log(RegExp.$2); // t}