正则表达式

// 普通字符匹配
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

// 贪婪量词, 只要首尾匹配即算匹配
/.*</.exec('1<545345<3234234'); // ['1<545345<']

// 惰性量词 .*? 匹配最少的
/.*?</.exec('1<545345<3234234'); // ['1<']

// 惰性量词 {n,m}? +? *? 懒惰量词只会匹配最少的
/ab{2,}/.exec('abbbbbbb'); // ['abbbbbbb']
/ab{2,}?/.exec('abbbbbbb'); // ['abb']

// 边界^锚位符, 匹配开始
/bc/.test('abc'); // true
/^bc/.test('abc'); // false

// 边界$锚位符, 匹配开始
/ab/.test('abc'); // true
/ab$/.test('abc'); // false

// 边界 \b 单词边界
/get\b/.test('gets'); // false
/get\b/.test('get'); // true

// 选择
/(h|H)ello/.test('hello');  // true
/(h|H)ello/.test('Hello');  // true

// 分组
/(h|H)ello (\w+)/.exec('hello world'); // ['hello', 'h', 'world']
/(?:h|H)ello (\w+)/.exec('hello world'); // ['hello', 'world']

// 具名分组
const data = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/.exec('2018-01-01');
data.groups; // {day: "01", month: "01", year: "2018"}

// 具名分组匹配
/^(?<say>hello)\w+\1$/.test('helloworldhello');
/^(?<say>hello)\w+\k<say>$/.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

// 后行断言 (?<= ) (?<! )
// 正断言
'hello Mtshen, Hi Mtshen'.replace(/(?<=hello )Mtshen/g, 'shenMengTao'); // "hello shenMengTao, Hi Mtshen"
// 负断言
'hello Mtshen, Hi Mtshen'.replace(/(?<!hello )Mtshen/g, 'shenMengTao'); // "hello Mtshen, Hi shenMengTao"

// 字符集合
/^[ab]$/.test('a'); // true
/^[ab]$/.test('b'); // true
/^[ab]$/.test('c'); // false
// 区间写法
/^[a-b]$/.test('a'); // true
/^[a-b]$/.test('b'); // true
/^[a-b]$/.test('c'); // false
// 可以使用元字符, 但分组不生效
/^[\w]$/.test('a'); // true
// 可以使用非
/^[^ab]$/.test('a'); // false
/^[^ab]$/.test('c'); // true

// 元字符
// 数值\d
/\d/.test('0'); // true
/\d/.test('a'); // false
// 非数值\D
/\D/.test('0'); // false
/\D/.test('a'); // true
// 文本\w, 文本包括0-9
/\w/.test('0'); // true
/\w/.test('a'); // true
/\w/.test('-'); // false
// 非文本\W
/\W/.test('a'); // false
/\W/.test('-'); // true

/\f/.test('\f'); // \f 匹配换行符
/\n/.test('\n'); // \n 匹配回车符\n
/\r/.test('\r'); // \t 匹配回车符\r
/\t/.test('\t'); // \t 匹配垂直制表符
/\s/.test(' '); // true \s 匹配空白字符, 相等于匹配 \f\n\r\t\v
/\S/.test(' '); // false \S 匹配非空白字符
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如果天总也不亮,那就摸黑过生活;如果发出声音是危险的,那就保持沉默;如果自觉无力发光,那就不必去照亮别人。但是,但...
    钟黎阅读 455评论 0 1
  • 周末没在家晒太阳,带丫头去了趟苏州,期中考试完了放松一下。两个半天的暴走,去的都是曾经去过的诚品书店和博物馆。山塘...
    深海潜能阅读 111评论 0 0
  • 图文/木兮桃兮 起稿可以用尺子,就是画出平行四边形和梯形三角形,这个立体几何好的很容易 找出最浅的翠绿色铺一下底色...
    木兮桃兮阅读 965评论 9 10
  • 题牡丹图·春色满园(原创) 文/指间沙(吉林德惠) 春色满园花怒放, 莺飞蝶舞各争芳。 牡丹确为真王者, 独占人间...
    子非渔76阅读 851评论 1 7