随着互联网技术的发展,前端开发迅速发展。然而,面对着越来越复杂的业务需求,代码的可靠性成为了前端开发人员关注的焦点。幸运的是,ES9 的正则表达式使得编写可靠的代码变的更加容易。
ES9 正则表达式简介
ES9 为正则表达式增加了两个重要的功能,让我们可以更加轻松地检查和处理文本数据。
向前匹配
向前匹配是一种新的正则表达式标志符,它被用于匹配任何在某个特定位置前出现的文本。这种特性的好处是可以用来匹配某些位置前面的一些特定内容,而不必将这些内容包含到匹配字符串中。
举个例子,如果我们需要匹配一个字符串,其中包含“bat”但是不包含“cat”,我们可以使用向前匹配的语法:
let str = 'The bat is not a cat'; let pattern = /bat(?!.*cat)/; console.log(pattern.test(str)); // true
在上面的例子中,(?!.*cat)
表示“匹配任何不以 cat 结尾的字符串”。因此,正则表达式将匹配“bat is not a”,但它将不匹配“bat is not a cat”。
向后匹配
向后匹配是另一个新的正则表达式标志符,它被用于匹配在某个特定位置后出现的文本。向后匹配与向前匹配不同,因为在这种情况下,我们需要确定位置后面的文本内容,而不是前面的。
举个例子,如果我们需要匹配一个字符串,其中每一个单词都以“is”结尾,但是“is”后面没有连字符,则可以使用向后匹配的语法:
let str = 'The sky is blue and the sea is green'; let pattern = /(?<!-)\sis\s/g; console.log(str.replace(pattern, ', ')); // The sky, is blue and the sea, is green
在上面的例子中,(?<!-)
表示“匹配任何不以 - 结尾的位置”,\s
表示空格,因此正则表达式将匹配任何不以 - 结尾的单词后面的空格。
如何使用 ES9 的正则表达式提高代码的可靠性
ES9 的正则表达式为我们提供了更多的工具来处理和验证文本数据,从而提高了代码的可靠性。下面是一些例子,展示了如何使用 ES9 正则表达式:
校验邮件地址
使用正则表达式来校验邮件地址是一项通用的任务。以下正则表达式可以检测任何具有“username@domain.tld”格式的字符串:
let pattern = /^\w+([.-]?\w+)*@\w+([.-]?\w+)*(.\w{2,3})+$/; console.log(pattern.test('email@example.com')); // true console.log(pattern.test('example@subdomain.example.com')); // true console.log(pattern.test('email@example.co.uk')); // true console.log(pattern.test('email@example')); // false console.log(pattern.test('email.example.com')); // false console.log(pattern.test('email@.com')); // false
在上面的例子中,^\w+([.-]?\w+)*@\w+([.-]?\w+)*(.\w{2,3})+$
是一个正则表达式,它将匹配任何具有“username@domain.tld”格式的字符串。这个表达式的详细解释如下:
^
表示字符串的开始;\w+([.-]?\w+)*
表示匹配用户名;@
表示一个 at 符号;\w+([.-]?\w+)*
表示匹配域名的起始部分,可以有多个点号或连字符;(.\w{2,3})+
表示匹配域名的结束部分,它包含一个 “.”,后跟两到三个字母;$
表示字符串的结束。
校验密码
校验密码是一个常见的任务。以下正则表达式可以检测任何包含字母、数字和特殊字符的密码,长度至少为8位:
let pattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+={}[\]|;:'",.<>?]).{8,}$/; console.log(pattern.test('P@ssw0rd')); // true console.log(pattern.test('password123')); // false console.log(pattern.test('weakpass.')); // false
在上面的例子中,/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+={}[\]|;:'",.<>?]).{8,}$/
是一个正则表达式,它将匹配任何包含字母、数字和特殊字符的密码(长度至少为8位)。这个表达式的详细解释如下:
^
表示字符串的开始;(?=.*[a-z])
表示至少包含一个小写字母;(?=.*[A-Z])
表示至少包含一个大写字母;(?=.*\d)
表示至少包含一个数字;(?=.*[~!@#$%^&*()_+={}[\]|;:'",.<>?])
表示至少包含一个特殊字符;.{8,}
表示字符串的长度至少为8位;$
表示字符串的结束。
总结
ES9 的正则表达式为处理和验证文本数据提供了更多的工具,从而提高了代码的可靠性。使用向前匹配和向后匹配,以及一些其他的技巧,可以编写更有效、可读性更高的正则表达式。在实践中应该多加使用,从而保证代码的正确性和稳定性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651cd20195b1f8cacd452364