如何将正则表达式与字符串中的任何单词匹配

时间:2017-07-05 19:08:12

标签: jquery regex search

我需要能够搜索用户的名字或可能的中间名和姓,并将其弹出搜索结果中。如果测试用例中的用户是“Alicia Henderson”,目前使用以下代码,我可以从字母A开始(即Alic,Alicia Hen)获取任何内容。但是,我希望能够输入“H”并获得Alicia Henderson(以及任何其他单词中的所有其他案例可能都在用户名中。类似于Facebook,Twitter和许多其他奇妙的搜索引擎提前谢谢!

  RowID    Col1    Col2    Col3
  1     1       1 Missing   Hello
  2     2 Missing       2   world
  3     3       3       1 Missing
  4     4       4       2   Again

2 个答案:

答案 0 :(得分:2)

您需要将字符串锚点的开头替换为允许匹配任何空格或字符串锚点开头的其他模式,或者 - 如果您只使用ASCII字母 - 单词边界\b

你需要的正则表达式也可能需要正确转义(如果它包含()或其他特殊的正则表达式字符。那么,这就是正则表达式的声明:

 new RegExp( "(?:^|\\s)" + this.value.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), "i" )

此处,(?:^|\\s)是一个非捕获组(?:...),它匹配字符串起始位置(^)或任何空格(\\s)和{{1}使用escaping regex转义特殊的正则表达式字符。 this.value修饰符使模式不区分大小写。

以下是显示此正则表达式如何工作的片段:



"i"

function filterUsers() {
    var rgx = new RegExp( "(?:^|\\s)" + this.value.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), "i" );
    var $el = $(".message_username").hide().filter(function() {
      return  rgx.test( $(this).text() );
    }).show();
    $(this).next("span").text("Results:"+ $el.length);
}

$("input[name='search_users']").on("input", filterUsers);




答案 1 :(得分:0)

首先,尝试使用此功能测试匹配:

const str = "Alicia Henderson";

console.log(testMatch(str, 'Alicia'));
console.log(testMatch(str, 'H'));
console.log(testMatch(str, 'NOPE!'));

function testMatch(str, inputToTest){
	return (new RegExp(inputToTest, 'gi')).test(str);
}