首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式:匹配可以位于或不位于文本开头或结尾的字符串

正则表达式:匹配可以位于或不位于文本开头或结尾的字符串
EN

Stack Overflow用户
提问于 2012-11-21 20:35:29
回答 2查看 698关注 0票数 3

我正在尝试查找具有三种可能形式的字符串:

代码语言:javascript
复制
ab10
ab 10
ab-10

到目前为止,我已经成功创建了这个正则表达式,

代码语言:javascript
复制
/\s+[a-zA-Z]{2}[-|\s.]?\d{2,3}\s+/

这适用于像这样的文本:

代码语言:javascript
复制
start foo ab 10 end foo.

当搜索到的字符串位于文本的开头或结尾时,就会出现问题,如下所示:

代码语言:javascript
复制
ab 10 end foo.

在这种情况下,开头没有空格。因此,我需要匹配字符串是否在文本的开头(或结尾),但我不知道如何进行匹配

有没有人能帮我一下?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-21 20:39:45

这应该可以解决您的问题:

代码语言:javascript
复制
/\b[a-zA-Z]{2}[-|\s.]?\d{2,3}\b/

\b表示单词边界,它断言一边(在当前位置之前或之后)是非单词字符,另一边是单词字符(由\w定义的单词字符)。

注意,如果你有一个像#ab10.这样的字符串,那么ab10仍然是匹配的。但是因为_是一个单词字符,所以_ab10不会给出匹配结果。

如果您想断言要搜索的字符串前后的字符必须是空白字符(由\s定义),或者是行的开头/结尾。我采用了后顾之忧和前瞻零宽度断言。

代码语言:javascript
复制
/(?<=^|\s)[a-zA-Z]{2}[-|\s.]?\d{2,3}(?=\s|$)/

上面的正则表达式在#ab10.ab10.中找不到任何匹配项

票数 2
EN

Stack Overflow用户

发布于 2012-11-21 20:39:20

我觉得你想要word boundaries \b

代码语言:javascript
复制
/\b[a-zA-Z]{2}[-|\s.]?\d{2,3}\b/

查看here on Regexr

现在匹配,如果之前没有单词字符,后面也没有单词字符。

单词字符是由字母、数字和下划线组成的预定义字符类\w的成员。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13493423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档