javascript - 如何匹配 "two or more words"

标签 javascript regex

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

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

// Should Fail
Joe
454545 354434

我认为这应该可行:

(\b\D*?\b){2,}

但事实并非如此。

最佳答案

您忘记在“单词”之间留出空格:

\b\D*?\b(?:\s+\b\D*?\b)+
           ^^^

我还可以看到许多其他问题:

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

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

您是否正在搜索至少包含两个“单词”并且可能还包含一些数字的字符串?或者字符串必须只包含“单词”而字符串中的任何地方都没有数字?目前您的正则表达式正在寻找两个连续的“单词”,但通常它们可能不是连续的。

关于javascript - 如何匹配 "two or more words",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3746846/

相关文章:

javascript - ChartJS 2.0 代码差异需要帮助

javascript - 如何正确使用 Ramda/JS 编写函数

SQL Server 使用正则表达式查询?

java - 在 Java 中使用正则表达式分割文本

javascript:两个 AJAX 调用

javascript - :first selector checks against parents parent, 而不是父容器

python - 正则表达式提取段落

regex - (a*+b*) 生成的字符串是什么类型

regex - 我们应该考虑将范围 [a-z] 用作错误吗?

javascript - 为什么在 tablesorter 列上排序删除水平滚动条