我一直在尝试创建一个RegExp,确保确保已输入至少一个单词和至少一个空格.我试着用这个:
/\w+\s+/
但这可以确保在空格之后有一个词.我只是想确保字符串中都有两个.它们不需要符合上述RegExp的顺序.
如何使RegExp工作,但没有匹配订单?
/(?=.*?\w)(?=.*?\s)/
Run Code Online (Sandbox Code Playgroud)
?=意思是"向前看",.*意思是"任意数量的字符"
所以"找到任意数量的字符然后\w","找到任意数量的字符和一个\s"
关于它是如何工作的另一个注意事项,前瞻是"不匹配",使它可以按任何顺序匹配.
你有两件事:
两件事情.
str.match(/\w/)str.match(/\s/)那么你为什么要尝试将它们作为一步呢?
if( str.match(/\w/) && str.match(/\s/))
Run Code Online (Sandbox Code Playgroud)
我的问题有很多答案.但是,我不想简单地选择一个被投票的那个.请详细解释为什么你的正则表达式有效,也许为什么我的正则表达式没有.
我的回答提供了最简单的解决方案.任何阅读它的人都非常清楚我们正在检查"它是否有单词字符,如果它包含空格字符".它也很容易扩展,例如,如果你想添加另一个检查.
zyklus的回答(/(?=.*?\w)(?=.*?\s)/)是在50Kb输入字符串上进行速度测试时最快的.在更常见的情况下(即最多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个安排来检查)并且难以辨认,它只会变得更糟.不要使用这个答案.
其他答案是现有答案的变体.