Regex: 指定“ space or start of string”和“ space or end of string”

假设您正在尝试模式匹配“ stackoverflow”。

你想要以下的东西:

 this is stackoverflow and it rocks [MATCH]


stackoverflow is the best [MATCH]


i love stackoverflow [MATCH]


typostackoverflow rules [NO MATCH]


i love stackoverflowtypo [NO MATCH]

如果两个站点都有空格,我知道如何解析堆栈溢出:

/\s(stackoverflow)\s/

与它在字符串的开头或结尾处相同:

/^(stackoverflow)\s/


/\s(stackoverflow)$/

但是如何使用正则表达式指定“ space or end of string”和“ space or start of string”呢?

159970 次浏览

(^|\s)将匹配空格或字符串的开始和 ($|\s)的空格或字符串的结束。它们一起是:

(^|\s)stackoverflow($|\s)

\b匹配单词边界(实际上不匹配任何字符) ,因此下面的代码应该可以满足您的需要:

\bstackoverflow\b

您可以使用以下任何一种:

\b      #A word break and will work for both spaces and end of lines.
(^|\s)  #the | means or. () is a capturing group.




/\b(stackoverflow)\b/

此外,如果不想在匹配中包含空间,可以使用后向/前向查找。

(?<=\s|^)         #to look behind the match
(stackoverflow)   #the string you want. () optional
(?=\s|$)          #to look ahead.

以下是我的建议:

 (?<!\S)stackoverflow(?!\S)

换句话说,如果“ stackoverflow”不是由非空格字符构成的 之前,而不是由非空格字符构成的 跟踪,则匹配“ stackoverflow”。

这比“空间或锚”方法更简洁(IMO) ,而且它不像 \b方法那样假定字符串以单词字符开始和结束。