// 正则是用来做字符匹配的
let str = "Hello, World!";
// 格式使用 /正则表达式内容/,如下
let regex = /World/;
// 构造类使用
let regexCls = new RegExp("World");
// 上面两种方式等同
// string 中可使用正则的方法有 search、match 和 replace
console.log(str.match(regex)); // [ 'World', index: 7, input: 'Hello, World!', groups: undefined ]
str.replace(regex, "auto"); // replace 将会返回一个新的字符串
console.log(str); // Hello, World!
console.log(str.search(regex)); // 7
// 规则
// 修饰符
// i 执行大小写不敏感匹配
// g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
// n 执行多行匹配
// i 使用
console.log(regex.test("world")); // false
// regex = /world/i;
console.log(regex.test("world")); // false
// g 使用
console.log(regex.exec("hh, world, world")); // [ 'world', index: 4, input: 'hh, world, world', groups: undefined ]
// regex = /world/ig;
console.log("hh, world, world".match(regex)); // [ 'world', 'world' ]
/**
* 方括号[] 用来表示范围
*/
/**
* 元字符
* . 查找单个字符,除了换行和行结束符。
* \d 查找数字。
* \D 查找非数字字符。
* \s 查找空白字符。
* \S 查找非空白字符。
* \b 匹配单词边界。
* \B 匹配非单词边界。
* \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。
* \w 查找数字、字母及下划线。
* \W 查找非单词字符。
* \0 查找 NULL 字符。
* \n 查找换行符。
* \f 查找换页符。
* \r 查找回车符。
* \t 查找制表符。
* \v 查找垂直制表符。
* \xxx 查找以八进制数 xxx 规定的字符。
* \xdd 查找以十六进制数 dd 规定的字符。
*
*/
// .
console.log("ddddddxdd".search(/./)); // 0
console.log("\nd".search(/./)); // 1
console.log("\n\n\t\n\n".search(/./)); // 2
// \d
console.log("ddddddxdd".search(/\d/)); // -1
console.log("dddddddd8".search(/\d/)); // 8
// \D
console.log("88331".search(/\D/)); // -1
console.log("88331d".search(/\D/)); // 5
// \s
console.log("ddddddxdd".search(/\s/)); // -1
console.log("dddddd xdd".search(/\s/)); // 6
console.log(" ".search(/\s/)); // 0
// \b
console.log("Hello world!".search(/\b/)); // 0
console.log("你好,hi".search(/\b/)); // 3
// \w 查找数字、字母及下划线。
console.log("你好,hi".search(/\w/)); // 3
console.log("2你好,hi".search(/\w/)); // 0
// \W 查找非单词字符。
console.log("你好,hi".search(/\W/)); // 0
console.log("2你好,hi".search(/\W/)); // 1
/**
* 量词
* n+ 匹配任何包含至少一个 n 的字符串。
* n* 匹配任何包含零个或多个 n 的字符串。
* n? 匹配任何包含零个或一个 n 的字符串。
* n{X} 匹配包含 X 个 n 的序列的字符串。
* n{X,} X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。
* n{X,Y} X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。
* n$ 匹配任何结尾为 n 的字符串。
* ^n 匹配任何开头为 n 的字符串
* ?=n 匹配任何其后紧接指定字符串 n 的字符串。
* ?!n 匹配任何其后没有紧接指定字符串 n 的字符串。
*/
// n+
console.log("ddddxdddd".search(/x+/)); // 4
console.log("dddddddd".search(/x+/)); // -1
// n*
console.log("ddddxxddd".search(/b*/)); // 0 为啥
// n?
console.log("ddddddxdd".search(/x+/)); // 6