学习正则(第二天)位置匹配

简介: 学习正则(第二天)位置匹配

01. 匹配开头:脱字符(^)


001. 是否符合开头(匹配)

正则:/^he/gm

正例:helloworld

反例:worldhello

说明:如下图所示,正例字符串符合已he开头,成功命中。

1.png

002. 开头插入字符(替换)

正则:/^/gm

待替换字符:helloworld

替换结果:

网络异常,图片无法展示
|

2.png


02. 匹配结尾:美元符($)


001. 是否符合结尾(匹配)

正则:/ld$/gm正例:helloworld反例:worldhello说明:如下图所示,正例字符串符合已ld结尾,成功命中。

3.png

002. 结尾插入字符(替换)

同开头插入字符


单词\非单词边界:\b、\B


\b单词边界指的就是单词字符\w和非单词字符\W之间的位置,也包含单词字符到有脱字符的开始位置和单子字符到有美元符的结束位置,\B反之,具体看下图进行理解:

4.png

6.png


03. 命中p的前面位置:(?=p)


正则:/(?=o)/gm

说明:如下图所示,成功找到字符串中每个o前面的位置。

7.png


04. 命中除了p前面的其他位置:(?!p)


正则:/(?!e)/gm

说明:如下图所示,成功找到字符串中除了e前面的其他位置。

8.png

如下图整理了正则中的位置的图示,因语言兼容版本的问题,更多了可以自行补充一下:

9.png


05. 案例分析:


001. 千分位显示数字

  1. 数字字符表示:\d
  2. 千分位量词:{3}
  3. 位置替换字符:(?=p)
  4. 从末尾往首进行命中


第一版:

10.png

呀?齐了怪了,只匹配到了一个位置?那我们想匹配多次怎么办?使用+呗,但我们要用()进行一下分组;


第二版:

11.png

现在可以看到匹配的位置多余命中了首位,那怎么去除呢?试试这个(?!^)


第三版:

12.png


最终正则的图示:

13.png


稍加扩展:当我们的字符串的内容稍加改变后,我们上面的正则将变得不那么顺手,请看下图:

14.png


那这个问题又该怎么办呢?开始的控制开始和结束的位置变的失效了,我们分析一下,字符串中每个1的前面和8的后面都属于单词的边界,那我用使用\B来匹配非单词的边界即可,每组结束的位置又是单词边界我们用\b表示,请看如下图:

15.png

16.png

17.png


欢迎关注我的公众号“前端小鑫同学”,原创技术文章第一时间推送。


位置匹配我们就先学到这,赶紧抄起以前代码中的正则用下面的工具试试看吧,XDM🤭。以上内容学习自老姚的正则表达式迷你书v1.1版,因部分内容还没能理解,还请阅读原著多多学习。


相关文章
|
3月前
|
算法
算法编程(二十五):检查单词是否为句中其他单词的前缀
算法编程(二十五):检查单词是否为句中其他单词的前缀
53 0
|
3月前
|
搜索推荐 算法 程序员
第六十一练 字符串匹配 - 精确匹配
第六十一练 字符串匹配 - 精确匹配
29 3
|
3月前
正则表达前一个元素至少出现一次
正则表达前一个元素至少出现一次
139 4
|
存储 Cloud Native Go
【刷题日记】1455. 检查单词是否为句中其他单词的前缀
【刷题日记】1455. 检查单词是否为句中其他单词的前缀
|
3月前
|
索引 Python C++
C/C++每日一练(20230418) 搜索插入位置、最长有效括号、子集
C/C++每日一练(20230418) 搜索插入位置、最长有效括号、子集
49 0
C/C++每日一练(20230418) 搜索插入位置、最长有效括号、子集
|
3月前
|
Java
每日一刷《剑指offer》字符串篇之正则表达式匹配
每日一刷《剑指offer》字符串篇之正则表达式匹配
59 0
每日一刷《剑指offer》字符串篇之正则表达式匹配
|
3月前
|
人工智能 自然语言处理 Java
想要搞定正则验证字串符?用这个办法最简单,质量还高!
在编程中,字符串的处理是不可避免的一部分。我们经常需要验证用户输入的数据、提取文本信息、替换特定字符等等。在这些场景中,正则验证字串符(Regex Validation)为我们提供了一种高效、灵活的处理方式。
|
10月前
|
算法 索引
【算法挨揍日记】day08——30. 串联所有单词的子串、76. 最小覆盖子串
给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words = ["ab","cd","ef"], 那么 "abcdef", "abefcd","cdabef", "cdefab","efabcd", 和 "efcdab" 都是串联子串。 "acdbef" 不是串联子串,因为他不是任何 words 排列的连接。
374 0
|
存储 数据可视化 算法
字符串之谜:如何找到出现频率最高的字符?
字符串之谜:如何找到出现频率最高的字符?
189 0
|
程序员
学好正则表达式,啥难匹配的内容都给我匹配上
学好正则表达式,啥难匹配的内容都给我匹配上