我一直在尝试创建一个RegExp,确保确定已输入至少一个单词和至少一个空格。我试着用这个:
/\w+\s+/
但这可以确保在空格之后有一个单词。我只是想确保字符串中都有两个。它们不需要符合上述RegExp的顺序。
如何使RegExp工作,但没有匹配订单?
答案 0 :(得分:6)
/(?=.*?\w)(?=.*?\s)/
?=
表示"预见",.*
表示"任意数量的字符"
所以"找到任意数量的字符然后\w
","找到任意数量的字符和\s
"
关于它是如何工作的另一个注意事项是,前瞻是"不匹配",使它可以按任何顺序匹配。
答案 1 :(得分:5)
你有两件事:
两件事。
str.match(/\w/)
str.match(/\s/)
那么你为什么要尝试将它们作为一步呢?
if( str.match(/\w/) && str.match(/\s/))
我的问题有很多答案。但是,我不想简单地选择一个被投票的那个。请详细解释为什么你的正则表达式有效,也许为什么我的没有。
我的回答提供了最简单的解决方案。任何阅读它的人都非常清楚我们正在检查它是否有单词字符,如果它包含空格字符"。它也很容易扩展,例如,如果你想添加另一个支票。
zyklus'在50Kb输入字符串上进行速度测试时,回答(/(?=.*?\w)(?=.*?\s)/
)是最快的。在更常见的情况下(即最多100个字符),这种速度差异实际上是不存在的。它的速度是我答案的两倍,但是" 2 *非常小的数字=非常小的数字"。添加新的测试用例非常容易(只需添加另一个(?=.*something)
块),但它的功能却不那么明显。
雅各布的回答((\w+.*\s+)|(\s+.*\w+)
)确实完全符合你的要求,首先检查是否有单词字符然后是空格字符,然后在失败之前检查相反的方向。它有效,但速度较慢。此外,如果您决定添加新的测试用例,则可以获得(\w+.*\s+.*\d+)|(\w+.*\d+.*\s)|(\s+.*\w+.*\d+)|(\s+.*\d+.*\w+)|(\d+.*\w+.*\s+)|(\d+.*\s+.*\w+)
之类的内容。如果你添加第四个测试(24个安排来检查)并且难以辨认,它只会变得更糟。不要使用这个答案。
其他答案是现有答案的变体。
答案 2 :(得分:3)
如果出于某种原因需要在一个RegEx中执行此操作:
(\w+.*\s+)|(\s+.*\w+)
如果您正在使用只允许使用单个正则表达式的库,则可以很方便。