0

我正在使用正则表达式来搜索酒店列表。有“testing hotel plaza”、“testing2 newhotel plaza”、“plaza hotel”等名称……

基本上我的要求是,如果用户输入 plaza,那么所有酒店都应该填充其中包含“Plaza”......但如果用户输入“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;
}
4

1 回答 1

1

像这样调用RegExp构造函数时,正则表达式不包含在斜杠 ( /.../) 中,但您的字符串中有一个前导正斜杠。此外,转义序列反斜杠需要自己转义,所以你应该使用的是

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

编辑:

是的,因为\b是相对于 定义的[A-Za-z0-9_],所以当涉及到非 ASCII 字符时,这确实是有问题的。您可能可以使用或多或少复杂的外观来解决它,但是一个更简单的解决方案很可能在这里解决问题,即searchString应该在开头或空格字符之后找到它:

var regex = new RegExp("(?:^|\\s)"+searchString, "gi");
于 2012-07-11T14:30:56.480 回答