我正在使用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
)进行相同的搜索。提前谢谢。
答案 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$/
只在开头寻找tool
,media
和{{1在字符串中的任何地方,be
只在字符串的末尾。)
注意我正在使用team
非捕获组,因为此处仅需要分组,而不是捕获(不存储子匹配)。如果您需要访问匹配的文本,则可以访问等于整个匹配的第0组。
此外,您在(?:...)
和\
之前不需要那些^
,它们根本不是必需的,并且在构造函数表示法中被忽略,因为没有像{一样的转义序列{1}}和$
。