2012-02-23 39 views
1

我要搜索这个词词boundry:在此字符串'#foo'如何定义与像#字符:。[在正则表达式的JavaScript

first foo second #foo 

使只有最后一个“#富”(与 '#')将匹配

我使用此代码,它会导致两个错误:

var mySearch ='#foo' 
var regexp = new RegExp('\\b' + mySearch + '\\b', 'g'); 
  1. 搜索mySearch = 'foo'将导致匹配“foo”(错误! - 应该只匹配第一)
  2. 搜索mySearch = '#foo'将导致在所有(错误未命中 - 应符合第二)

怎么写吗?

回答

0

尝试:

var regexp = new RegExp('\b' + mySearch + '\b', 'g'); 
+0

将无法​​正常工作(我已经尝试过它)。当这样做时,正则表达式本身的输出并不像我们想要的那样'/ \ b#foo \ b \ /',但奇怪的字符有些奇怪(我不能在这里复制粘贴它)。无论如何 - 这个正则表达式'/ \ b#foo \ b \ /'仍然会导致我在我的问题 – Alon 2012-02-23 14:02:00

0

\b在正则表达式是字的边界。它将无法匹配空间和英镑#之间的边界。

所以你regexp应该只是

var regexp = new RegExp(mySearch + '\\b', 'g'); 
+0

中提到的问题,但这是解决方案的一半,因为如果我搜索“foo”它将匹配“foo”在“#foo”中,我不想那么做...... – Alon 2012-02-23 14:26:57

+0

@Alon如果你想在没有'#foo'的情况下匹配'foo',模式应该是'(^ | [^#])foo',这意味着'foo'不应该跟随'#'。 – 2012-02-23 14:36:21