正则表达式使用jQuery完全匹配多个搜索词

时间:2015-12-10 09:26:54

标签: javascript regex

我正在使用jQuery。我必须检查给定的单词列表是否在段落中。我想要一个单词或短语的完全匹配(全字匹配).ie,如果我在'Be a bee'中搜索'be',那里只有一个匹配。我这样做了。

var searchText="tool,media,be,team";
var regexExactMatch = new RegExp('\^' + searchText.split(",").join("|") + '\$');
if (regexExactMatch.test(item.Name))
{
//Found
}

它适用于一个搜索词,即没有任何逗号(例如:媒体)。 但是对于以逗号分隔的搜索,它会破坏。

如何对多个搜索字词进行完全匹配搜索。我对正则表达式非常新。另外,我必须对整数和日期(MM/dd/yyyy)进行相同的搜索。提前谢谢。

2 个答案:

答案 0 :(得分:1)

从头开始删除^,从RegExp末尾删除$。像这样:

var regexExactMatch = new RegExp(searchText.split(",").join("|"));

<强>原因

^将设置匹配文本需要位于字符串开头的条件,$设置匹配文本需要位于字符串末尾的条件,这可以只有在字符串中只有该文本时才会发生。

答案 1 :(得分:1)

对于完整输入字符串匹配使用

new RegExp('^(?:' + searchText.split(",").join("|") + ')$');
             ^^^                                       ^

对于整个单词搜索,请将^$替换为\b

new RegExp('\\b(?:' + searchText.split(",").join("|") + ')\\b');

否则,锚点仅分别应用于第一个和最后一个选项(即你的正则表达式看起来只有/^tool|media|be|team$/只在开头寻找toolmedia和{{1在字符串中的任何地方,be只在字符串的末尾。)

注意我正在使用team非捕获组,因为此处仅需要分组,而不是捕获(不存储子匹配)。如果您需要访问匹配的文本,则可以访问等于整个匹配的第0组。

此外,您在(?:...)\之前不需要那些^,它们根本不是必需的,并且在构造函数表示法中被忽略,因为没有像{一样的转义序列{1}}和$