>  기사  >  웹 프론트엔드  >  JS 정규식 핵심 분석

JS 정규식 핵심 분석

小云云
小云云원래의
2018-01-30 17:20:181524검색

이 글에서는 주로 JS 정규식의 핵심 내용을 공유합니다. 이전에 VueJS의 소스 코드를 보고 HtmlParser 부분을 봤기 때문에 이전에 보았던 정규식에 대한 기본 지식이 완전히 부족하다고 느꼈습니다. 블로그 정보를 뒤져보고 JS를 좀 정리해서 여러분과 SF 친구들이 읽기 쉽도록 정규식 중 어려운 부분을 정리했습니다.

정기 그룹핑

반복 매칭

반복 매칭을 위해 저희는 정규식의 그룹화 기능을 자주 사용하고, 이를 연습하기 위해 정규 매칭 IP 주소를 사용합니다.

일치시키려는 IP 주소가 0.0.0.0 - 255.255.255.255 사이라고 가정하면 직관적으로 이해할 수 있습니다. 세 자리 + 점을 세 번 일치시킨 다음 세 자리를 한 번 일치시키세요.

여기서 언급된 세 자리 숫자 + 마침표는 우리가 말하는 규칙입니다: d. {1,3}., 규칙을 괄호로 묶으면 (d{1,3}.) 그룹이 되므로 IP 주소와 일치하는 정규식은 다음과 같습니다. 작성: (d{1 ,3}.){3}d{1,3}d{1,3}., 当我们把规则用括号包装后, 就变成了组: (d{1,3}.), 所以匹配IP地址的正则表达式可以写作: (d{1,3}.){3}d{1,3}

换种思路, 我们也可以这样匹配: d{1,3}(.d{1,3}){3}

拓展: 聪明的你可能已经想到, d{1,3} 匹配是有疏漏的. 在实际生产过程中, d{1,3} 可能匹配 999 这种数字, 他是一个错误的IP地址段. 这里贴上真实的IP地址正则匹配供大家参考: ((25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))) , 另人愉快的是, 它使用的分组策略仍然是不变的.

后向引用(反向引用)

我们考虑一个很特殊的情况, 当我们要匹配四个IP段相同的情况, 如 100.100.100.100 时, 重复匹配分组的策略失效了: 重复匹配分组 并不能保证匹配相同的数字 -> 这时候我们需要借助 后向引用 策略的力量了(少年, 你渴望力量吗2333, 戳我头像, 带你探索音乐与代码交织的文艺道路.)

后向引用在不同语言的正则表达式书写中, 有不同的语法, 我们讨论JS中最常见的一种, 形如: number 的后向引用, 其中, number 代表分组的序号.

给你一个简单的栗子, 瞬间就记住了, 假使我们要匹配重复的三位数字, 我们将匹配一个数字的规则标记为一个分组: (d), 重复匹配这个分组(第一个分组)的具体内容三次: (d)1, 这样就达到了目的.

我们很容易将重复匹配和后向引用分别开来: 前者是重复匹配相同的规则, 后者是匹配分组的具体内容.

默认的一些规则需要稍加理解并记住:

위 내용은 JS 정규식 핵심 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.