Javascript 正则表达式使用jQuery精确匹配多个搜索词

Javascript 正则表达式使用jQuery精确匹配多个搜索词,javascript,regex,Javascript,Regex,我正在使用jQuery。我必须检查给定的单词列表是否在段落中。我想要一个单词或短语的精确匹配(全词匹配)。也就是说,如果我在“bee a bee”中搜索“be”,则只有一个匹配。我是这样做的 var searchText="tool,media,be,team"; var regexExactMatch = new RegExp('\^' + searchText.split(",").join("|") + '\$'); if (regexExactMatch.test(item.Name))

我正在使用jQuery。我必须检查给定的单词列表是否在段落中。我想要一个单词或短语的精确匹配(全词匹配)。也就是说,如果我在“bee a bee”中搜索“be”,则只有一个匹配。我是这样做的

var searchText="tool,media,be,team";
var regexExactMatch = new RegExp('\^' + searchText.split(",").join("|") + '\$');
if (regexExactMatch.test(item.Name))
{
//Found
}
它只适用于一个搜索词,即不带任何逗号(例如:媒体)。 但对于逗号分隔的搜索,它将中断


如何对多个搜索词进行精确匹配搜索。我对regex很陌生。我还必须对整数和日期进行相同的搜索(
MM/dd/yyyy
)。提前感谢。

删除RegExp开头的
^
和结尾的
$
。像这样:

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


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

从RegExp的开头删除
^
,从结尾删除
$
。像这样:

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

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

用于完全输入字符串匹配

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

new RegExp('\\b(?:' + searchText.split(",").join("|") + ')\\b');
否则,锚点仅分别应用于第一个和最后一个备选方案(即您的正则表达式看起来像
/^tool | media | be | team$/
仅在开始时查找
工具
媒体
be
字符串中的任何位置,而
团队
仅在字符串末尾)

注意:我使用的是
(?:…)
非捕获组,因为这里只需要分组,不需要捕获(不存储子匹配)。如果需要访问匹配的文本,可以访问等于整个匹配的第0组

另外,在
^
$
之前,您不需要这些
\
,它们根本不是必需的,并且在构造函数表示法中被忽略,因为没有像
\^
\$

这样的转义序列用于完全输入字符串匹配

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

new RegExp('\\b(?:' + searchText.split(",").join("|") + ')\\b');
否则,锚点仅分别应用于第一个和最后一个备选方案(即您的正则表达式看起来像
/^tool | media | be | team$/
仅在开始时查找
工具
媒体
be
字符串中的任何位置,而
团队
仅在字符串末尾)

注意:我使用的是
(?:…)
非捕获组,因为这里只需要分组,不需要捕获(不存储子匹配)。如果需要访问匹配的文本,可以访问等于整个匹配的第0组


另外,在
^
$
之前,您不需要这些
\
,它们根本不是必需的,并且在构造函数表示法中被忽略,因为没有像
\^
\$

这样的转义序列使用
新的RegExp('^(?:'+searchText.split(,'').join(“|+”)$)。否则,锚点仅分别应用于第一个和最后一个备选方案。为什么不将这些字符串放入数组中?这不是jQuery。。。事实上,我觉得这个问题相当不清楚。你说的精确匹配是什么意思?全词匹配还是全字符串匹配?对于整词搜索,将
^
$
替换为
\\b
@stribizev('^(?:'+searchText.split(“,”).join(“|“+”)$”);他正在工作。你能把它写成answerUse
newregexp(“^(?:”+searchText.split(“,”).join(“|“+”)$”)吗。否则,锚点仅分别应用于第一个和最后一个备选方案。为什么不将这些字符串放入数组中?这不是jQuery。。。事实上,我觉得这个问题相当不清楚。你说的精确匹配是什么意思?全词匹配还是全字符串匹配?对于整词搜索,将
^
$
替换为
\\b
@stribizev('^(?:'+searchText.split(“,”).join(“|“+”)$”);他正在工作。你能把它写成答案吗?用你的方法,前面的
和后面的
是多余的#2是完全错误的。将匹配
工具
媒体
。将匹配
工具媒体
工具媒体
。在您的方法中,前导
和尾随
是多余的#2是完全错误的。将匹配
工具
媒体
。将匹配
工具媒体
工具媒体