我正在尝试找到一个包含三种可能形式的字符串:
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.
在这种情况下,开头没有空格。所以如果字符串位于文本的开头(或结尾),我需要匹配,但我不知道如何做到这一点
有人可以给我一些帮助吗?
答案 0 :(得分: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.
或ab10.
答案 1 :(得分:1)
我想你想要word boundaries \b
/\b[a-zA-Z]{2}[-|\s.]?\d{2,3}\b/
现在匹配,前面没有单词字符而后面没有单词字符。
单词字符是预定义字符类\w
的成员,它们是字母,数字和下划线。