正则表达式:\ b表示不以单词字符开头的字符串?

时间:2013-06-02 14:38:54

标签: javascript regex

假设我有以下字符串:

Lorem #test ^%#test ipsum#test dolor #test sit #testamet.
      ^^^^^                          ^^^^^

我使用什么正则表达式来仅选择标记的#test个实例?因此,如果它是另一个单词的一部分或者其中有其他字符,我不想选择它。

如果我只搜索test,我会使用/\btest\b/g,但如果文字以字符开头,\b似乎只有效吗?

1 个答案:

答案 0 :(得分:2)

\b没有确切的替代品,因为JavaScript没有lookbehind assertions

但是如果你不介意前面的空格字符成为匹配的一部分,你可以使用

/(?:^|\s)#test\b/m

如果它位于一行的开头,则匹配"#test";如果不是,则匹配" #test"

如果您想要除空格以外的其他字符来界定“单词边界”,则可以指定它们。例如,如果您想接受除\w个字符以外的任何内容,请使用

/(?:^|\W)#test\b/m

将匹配",#test"中的"foo,#test,foo"。不幸的是,你无法摆脱比赛中的逗号。但是如果你使用

var match = /(?:^|\W)(#test)\b/m.exec(subject);
if (match != null) {
    result = match[1];
} 

你至少接近了。