如何匹配"两个或多个单词"

Wil*_*ill 1 javascript regex

在给定的字符串中,我试图验证至少有两个单词,其中一个单词被定义为任何非数字字符,例如

// Should pass
Phil D'Sousa
Billy - the - Kid

// Should Fail
Joe
454545 354434
Run Code Online (Sandbox Code Playgroud)

我认为这应该有效:

(\b\D*?\b){2,}
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.

Mar*_*ers 9

你忘了在你的"单词"之间留出空格:

\b\D*?\b(?:\s+\b\D*?\b)+
           ^^^
Run Code Online (Sandbox Code Playgroud)

我可以看到其他一些问题:

我也很怀疑你对"单词"的定义.任何非数字字符也包括标点符号和空格.这可能不是你真正的意思.您可能想要尝试定义这样的单词:[^\d\s]+.这仍然允许单词包含标点符号,但它不允许使用数字和空格.

你使用单词边界有一个问题 - 如果一个单词可以包含标点符号,那么在标点符号开头或结尾的单词将没有单词边界,所以你的正则表达式会错过它们.

您是否正在搜索包含至少两个"单词"的字符串,可能还包含一些数字?或者字符串必须只包含"单词"而字符串中的任何位置都没有数字?目前你的正则表达式正在寻找两个连续的"单词",但一般来说它们可能不是连续的.