正则表达式

// 普通字符匹配
const str = 'hello RegExp';
/hello RegExp/.test(str); // true
/hello regexp/.test(str); // false

// i修饰符 不区分大小写
const str = 'hello RegExp';
/hello regexp/i.test(str); // true

// g修饰符 设置匹配为全局
const str = 'abcaaabcaa';
str.replace(/abc/, '000'); // 000aaabcaa
str.replace(/abc/g, '000'); // 000aa000aa

// m修饰符 设置匹配为多行
const str = '\b\t\nabc\b\t\n';
/^abc$/.test(str); // false
/^abc$/m.test(str); // true

// u修饰符(ES6)  用来正确处理大于\uFFFF的 Unicode 字符。
/^\uD83D/u.test('\uD83D\uDC2A'); // false
/^\uD83D/.test('\uD83D\uDC2A'); // true

// y修饰符(ES6) 与g修饰符类似, 但开始位置不同
const str = 'aaa_aa_a';
const r1 = /a+/g;
const r2 = /a+/y;
r1.exec(str) // ["aaa"]
r1.exec(str) // ["aa"]

r2.exec(str) // ["aaa"]
r2.exec(str) // null

// s修饰符(ES7) 使.能够匹配一切字符
/./.test('\n'); // false
/./s.test('\n'); // true

// 量词 {n} 匹配n个
/ab{2}/.test('ab'); // false
/ab{2}/.test('abb'); // true

// 量词 {n,m} 匹配 >= n 且 <= m 个
/ab{2,3}/.test('ab'); // false
/ab{2,3}/.test('abb'); // true
/ab{2,3}/.test('abbb'); // true

// 量词 {n,} 匹配 >= n 个
/ab{2,}/.test('ab'); // false
/ab{2,}/.test('abbbb'); // true

// 量词 ? 相当于 {0,1} 匹配0个或1个
/ab?/.test('a'); // true
/ab?/.test('ab'); // true

// 量词 + 相当于 {1,} 匹配至少1个
/ab+/.test('a'); // false
/ab+/.test('abbb'); // true

// 量词 * 相当于 {0,} 匹配任意个
/ab*/.test('a'); // true

// 贪婪量词, 只要首尾匹配即算匹配
/.*\d{4})-(?\d{2})-(?\d{2})/.exec('2018-01-01');
data.groups; // {day: "01", month: "01", year: "2018"}

// 具名分组匹配
/^(?hello)\w+\1$/.test('helloworldhello');
/^(?hello)\w+\k$/.test('helloworldhello');

// 先行断言(?= ) (?! )
// 正断言
'hello Mtshen, hello world'.replace(/hello(?= Mtshen)/g, 'hi'); // hi Mtshen, hello world
// 负断言
'hello Mtshen, hello world'.replace(/hello(?! Mtshen)/g, 'hi'); // hello Mtshen, hi world

// 后行断言 (?<= ) (?

你可能感兴趣的:(正则表达式)