2012-07-11 92 views
0

我正在使用正则表达式搜索酒店列表。有“测试酒店广场”,“testing2新酒店广场”,“广场酒店”等名称....查找以给定搜索字符串开头的词数 - Regex

基本上我的要求是,如果用户输入广场,然后所有的酒店应该填充其中包含“广场”...但如果用户键入“aza”,则不应填充结果。总之,在给定的字符串中,我需要查找是否有任何以用户输入的字符串开头的单词,如果是,则显示结果。

这是一个代码,我卡住了,不工作。

var regex = new RegExp("/\b"+searchString, "gi"); 
if (mainString.match(regex)) 
{ 
    return true; 
} 

这是工作,但它是找到所有出现哪怕是一个中间人物或者我不希望任何位置。

var regex = new RegExp(searchString , "gi"); 
if (mainString.match(regex)) 
{ 
    return true; 
} 

回答

1

当调用RegExp构造像这样,正则表达式是不是包围在斜杠(/.../),但你有一个领导着你的字串凶多吉少。此外,转义序列反斜杠需要转义自己,所以你应该用什么

var regex = new RegExp("\\b"+searchString, "gi"); 

编辑:

是的,因为\b相对于[A-Za-z0-9_]定义的,这确实是有问题的,当谈到到非ASCII字符。你也许可以解决它使用或多或少复杂lookarounds,但更简单的解决方案,将最有可能在这里做的伎俩是说,searchString应该从头或空白字符后发现之一:

var regex = new RegExp("(?:^|\\s)"+searchString, "gi"); 
+0

谢谢..这就是我想要的...只有一个小问题。当有像“Väst”这样的词,并且如果我用“st”搜索时,这会得到显示,尽管它不是以“st”开头...... ....是否有任何特定的原因或不同语言的代码? – Kalish 2012-07-11 14:42:06

+0

我发现这篇文章,但我不能完全理解..... http://stackoverflow.com/questions/3507453/regex-match-for-beginning-of-multiple-words-in-string – Kalish 2012-07-11 14:43:00

+0

看到我编辑回答 – 2012-07-11 14:53:46