Javascript 使用正则表达式匹配一个或多个单词的一部分

Javascript 使用正则表达式匹配一个或多个单词的一部分,javascript,jquery,regex,Javascript,Jquery,Regex,我对regex还不熟悉,在一些基本的东西上有困难 var name = "robert johnson"; var searchTerm = "robert johnson"; if (searchTerm.match(name)) { console.log("MATCH"); } 我想尝试查找与以下任何一项匹配的内容: rob, robert, john, johnson, robertjohnson 为了简化正则表达式,我已经在“name”和“searchTerm”变量中添加

我对regex还不熟悉,在一些基本的东西上有困难

var name = "robert johnson";
var searchTerm = "robert johnson";

if (searchTerm.match(name)) {
    console.log("MATCH");
}
我想尝试查找与以下任何一项匹配的内容:

rob, robert, john, johnson, robertjohnson
为了简化正则表达式,我已经在“name”和“searchTerm”变量中添加了一个.toLowerCase()

需要将什么正则表达式添加到searchTerm.match(名称)中才能执行此操作

澄清:我不只是想用我给出的5个例子来让一个测试通过,我还想用一些正则表达式来让这些测试通过。例如:

searchTerm.match(name)
…需要更改为以下内容:

searchTerm.match("someRegexVoodooHere"+name+"someMoreRegexVoodooHere")
所以,如果我编辑

var searchTerm = "robert johnson";
…未来

var searchTerm = "rob";
…相同的函数searchTerm.match指令将起作用


再说一次,我对regex是新手,所以我希望我问得很清楚。基本上,我需要编写一个函数,它接受任何搜索词(这里不包括它,但在其他地方我要求至少输入3个字符),并且可以检查在给定的“firstname lastname”字符串中是否按顺序找到了这3个字母。

正则表达式查找模式以进行匹配。您的问题的答案在某种程度上取决于您希望实现的目标——也就是说,您实际上是想要匹配的组,还是仅仅测试是否存在执行其他代码的模式

要匹配字符串中的值,需要使用布尔值或与
|
匹配-使用
i
标志将导致不区分大小写的匹配,因此不需要调用
toLowerCase()
-

如果您想要一个更复杂的正则表达式来匹配所有这些变体-

var names = "rob, robert, john, johnson, robertjohnson, paul";
var regex = /\b((rob(ert)?)?\s?(john(son)?)?)\b/i;
var matches = regex.match(names);
这将导致
匹配
数组有5个元素(除了“paul”之外的每个名称)。值得注意的是,这也将匹配其他名称,例如“rob johnson”和“rob john”,这可能是不需要的

您还可以使用
test()
-

将为您提供所有可能的匹配项(如果您需要查找输入字符串是否包含任何单词,则有多个匹配项)

/\b(john(son)?|rob(ert(johnson)?)?)\b/.test("robert johnson")
如果字符串有任何匹配项,将返回
true
。(最好在条件中使用此选项,因为不需要查找所有匹配项)

  • \b
    -表示单词边界
  • ()
    -捕获组
  • -量词“一个或无”
  • |
    -逻辑“或”

您可以创建一个测试术语数组,并在该数组上循环。这种方法意味着在动态环境中构建不太复杂的正则表达式

var name = "robert johnson";
var searchTerm = "robert johnson";

var tests = ['rob', 'robert', 'john', 'johnson', 'robertjohnson'];
var isMatch = false;

for (i = 0; i < tests.length; i++) {
    if (searchTerm.test(tests[i])) {
        isMatch = true;
    }
}

alert(isMatch)
var name=“罗伯特·约翰逊”;
var searchTerm=“罗伯特·约翰逊”;
var测试=['rob'、'robert'、'john'、'johnson'、'robertjohnson'];
var isMatch=错误;
对于(i=0;i
/^\s*(罗伯(ert)?约翰(儿子)?罗伯特*约翰逊)\s*$/i.test(str)

如果
str
匹配以下任一项,则将返回true:

  • 抢劫
  • 罗伯特
  • 约翰
  • 约翰逊
  • 罗伯特约翰逊
  • 罗伯特·约翰逊
  • robert johnson(这两个之间的空格无关紧要)
它只是不关心前面或后面是否有空字符。如果不需要,请从模式的开头和结尾删除
\s*
。此外,名称和姓氏之间的空格和星号允许在这两个字符之间有0个或更多空格。如果不想让它包含任何空格,请去掉该空格和一个空格斯特里斯克


插入符号
^
表示字符串的开头,美元符号
$
表示字符串的结尾。最后,结尾的
i
标志使其不区分大小写进行搜索。

如果您只需要根据字符串检查3个字符(根据上次编辑),整个概念过于复杂。解释更详细的用例可能会有帮助。我的问题非常糟糕。对不起,伙计们。我认为这更简单,但我可以看到我在哪里引入了混淆。请参阅下面接受的答案评论。接受这一点作为解决方案,并投票表决。我最终修改了原始que我试了几次来澄清-前面的更好的例子会有所帮助。多亏了你上一篇文章的链接。最后,我发现jQuery的.contains()方法正是我所需要的。伙计,如果每次我在jQuery的瑞士军刀中发现一些随机工具时我都有一枚硬币的话。。。
"robert johnson".match(/\b(john(son)?|rob(ert(johnson)?)?)\b/)
/\b(john(son)?|rob(ert(johnson)?)?)\b/.test("robert johnson")
var name = "robert johnson";
var searchTerm = "robert johnson";

var tests = ['rob', 'robert', 'john', 'johnson', 'robertjohnson'];
var isMatch = false;

for (i = 0; i < tests.length; i++) {
    if (searchTerm.test(tests[i])) {
        isMatch = true;
    }
}

alert(isMatch)