❝
本文参考了 https://javascript.info/ 站点里的相关资料。
❞
学习过 JS 正则表达式的同学应该都知道,在匹配字符的时候,有一些特殊字符在正则中具有特殊含义,需要经过 转义后才能表示匹配那个字符本身,
特殊字符
JS 正则中的特殊字符是:[
、]
、{
、}
、(
、)
、、
^
、$
、.
、|
、?
、*
和 +
,一共 14 个。
这些特殊的字符的含义分别是:
-
[
和]
是用来表达字符范围的
"Mop top".match(/[tm]op/gi); // ['Mop', 'top']
-
{
和}
是用来表达匹配数量的
// 匹配 5 位数字
"I'm 12345 years old".match(/d{5}/);
// ['12345', index: 4, input: "I'm 12345 years old", groups: undefined]
-
+
、*
和?
是{n}
的速记写法。+
等价于{1,}
、*
等价于{0,}
、?
等价于{0,1}
-
(
和)
是用来标记捕获组的。
"2019-04-30".match(/(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})/)
// ['2019-04-30', '2019', '04', '30', index: 0, input: '2019-04-30', groups: {year: '2019', month: '04', day: '30'}]
-
^
和$
称为“锚点(anchors)”,匹配文本的开头和末尾
/^Mary/.test("Mary had a little lamb") // true
/snow$/.test("its fleece was white as snow") // true
// 完整匹配
/^dd:dd$/.test("12:34") // true
/^dd:dd$/.test("12:345") // false
-
.
则用来表示任意一个字符(除了换行符)
"Z".match(/./)
// ['Z', index: 0, input: 'Z', groups: undefined]
-
用来转义特殊字符时使用
"Chapter 5.1".match(/d.d/)
// ['5.1', index: 8, input: 'Chapter 5.1', groups: undefined]
-
|
用于表示或
"First HTML appeared, then CSS, then JavaScript".match(/html|php|css|java(script)?/gi)
// ['HTML', 'CSS', 'JavaScript']
范围语法 […] 中那些不需要转义的特殊字符
范围语法 [...]
中有些特殊字无需转义。分别是:
-
.
、+
、(
和)
-
在开头或结尾的连字符 -
-
不在开头的尖尖号 ^
比如下面的写法,就是冗余的:
"1 + 2 - 3".match(/[-().^+]/g)
// ['+', '-']
完全可以简写成:
"1 + 2 - 3".match(/[-().^+]/g)
// ['+', '-']
总结
本文介绍了 JS 正则表达式中的特殊字符相关的知识。突然感觉到,JS 正则表达式虽然强大,但有时确实挺难读的,简洁也会带来一些理解和学习成本。
感谢你的阅读,Happy Coding!
原文始发于微信公众号(写代码的宝哥):JavaScript 正则表达式:特殊字符
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/243685.html