3

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

ab10
ab 10
ab-10

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

/\s+[a-zA-Z]{2}[-|\s.]?\d{2,3}\s+/

适用于如下文本:

start foo ab 10 end foo.

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

ab 10 end foo.

在这种情况下,开头没有空格。所以我需要匹配字符串是否在文本的开头(或结尾),但我不知道该怎么做

有人可以给我一点帮助吗?

4

2 回答 2

2

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

/\b[a-zA-Z]{2}[-|\s.]?\d{2,3}\b/

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

请注意,如果您有一个类似的字符串#ab10.,那么ab10仍然会匹配。但是_ab10会给出不匹配,因为_是一个单词字符。

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

/(?<=^|\s)[a-zA-Z]{2}[-|\s.]?\d{2,3}(?=\s|$)/

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

于 2012-11-21T12:39:45.143 回答
1

我想你想要单词边界 \b

/\b[a-zA-Z]{2}[-|\s.]?\d{2,3}\b/

在 Regexr 上查看

现在匹配了,当前面没有单词字符并且后面没有单词字符时。

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

于 2012-11-21T12:39:19.660 回答