ES9 是 JavaScript 语言的一次更新,其中包含了许多新特性,其中正则表达式也得到了很大的改善。这一次更新使得 JavaScript 中的正则表达式更加强大、精确和易用,更像 Perl 6 或者 PCRE。
正则表达式的新特性
命名捕获组
ES9 中的正则表达式支持命名捕获组,使得我们可以给捕获的内容起一个有意义的名称,比如:
const re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; const match = re.exec('2021-09-27'); console.log(match.groups.year); // 2021 console.log(match.groups.month); // 09 console.log(match.groups.day); // 27
后行断言
后行断言是指在匹配的字符串后面加上一个限制条件,比如:
const re = /(?<=-)\d+/; console.log('-123'.match(re)); // ['123'] console.log('123-'.match(re)); // null console.log('123'.match(re)); // null
Unicode 转义符
ES9 支持 Unicode 转义符,使得我们可以在正则表达式中使用 Unicode 字符,以免出现乱码或者错误的匹配,比如:
console.log(/\u{1F60D}/u.test('😍')); // true console.log(/💩/.test('💩')); // false
正则表达式的学习和指导意义
正则表达式是一种很重要的语法,可以用于匹配、搜索、替换等不同的场景,是前端开发工作中必不可少的一部分。学习正则表达式需要不断的练习和总结,建议平时多看一些正则表达式的相关文章、书籍、工具和网站,以充分掌握正则表达式的基本语法、应用场景和注意事项。
在实际开发中,正则表达式不仅可以用于前端页面的交互、验证和过滤,还可以用于后端服务器的接口、数据处理、安全防范等方面,具有很广泛的应用价值。因此,我们需要充分了解正则表达式的语法和特性,以提高前端开发效率和质量。
示例代码
下面是一些常见的正则表达式案例,供大家参考和练习:
匹配邮箱地址
const re = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i; console.log(re.test('test@gmail.com')); // true console.log(re.test('test@domain.co.jp')); // true console.log(re.test('test@192.168.0.1')); // false console.log(re.test('test')); // false
匹配手机号码
const re = /^1[3456789]\d{9}$/; console.log(re.test('13800138000')); // true console.log(re.test('1380013800')); // false console.log(re.test('17800138000')); // true console.log(re.test('10000000000')); // false
删除 HTML 标签
const re = /<[^>]+>/g; console.log('<p>hello world.</p>'.replace(re, '')); // 'hello world.' console.log('<h1>title</h1><p>content</p>'.replace(re, '\n')); // 'title\ncontent'
匹配 URL
const re = /^(http(s)?:\/\/)?([a-z0-9-]+\.)+[a-z]{2,}(:\d{1,5})?(\/[^\/?#]+)*(\?[^\/]+)?(#.+)?$/i; console.log(re.test('https://www.baidu.com')); // true console.log(re.test('http://abc.def.com/path/to/file?query=123#hash')); // true console.log(re.test('://example.com')); // false
匹配身份证号码
const re = /^[1-9]\d{5}(18|19|20)\d{2}(0\d|1[0-2])([0-2]\d|3[0-1])\d{3}[xX\d]$/; console.log(re.test('110101199003076537')); // true console.log(re.test('220101197801011234')); // true console.log(re.test('210101199118098675')); // false console.log(re.test('230101199003076532')); // true
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654c8c247d4982a6eb603d23