Javascript 正则表达式使用jQuery精确匹配多个搜索词
我正在使用jQuery。我必须检查给定的单词列表是否在段落中。我想要一个单词或短语的精确匹配(全词匹配)。也就是说,如果我在“bee a bee”中搜索“be”,则只有一个匹配。我是这样做的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))
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(“|“+”)$”);他正在工作。你能把它写成answerUsenewregexp(“^(?:”+searchText.split(“,”).join(“|“+”)$”)吗代码>。否则,锚点仅分别应用于第一个和最后一个备选方案。为什么不将这些字符串放入数组中?这不是jQuery。。。事实上,我觉得这个问题相当不清楚。你说的精确匹配是什么意思?全词匹配还是全字符串匹配?对于整词搜索,将^
和$
替换为\\b
@stribizev('^(?:'+searchText.split(“,”).join(“|“+”)$”);他正在工作。你能把它写成答案吗?用你的方法,前面的(
和后面的)
是多余的#2是完全错误的。将匹配工具
或媒体
。将匹配工具媒体
或工具媒体
。在您的方法中,前导(
和尾随)
是多余的#2是完全错误的。将匹配工具
或媒体
。将匹配工具媒体
或工具媒体
。