javascript - 正则表达式仅适用于不以空格分隔的单个单词
问题描述
我有这个正则表达式,它在一个最小长度为 4 的单词中查找一个数字和一个字符:
^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{4,}$
它适用于:
ABCD1
但是如果我有多个单词,例如:
ABCD1 ABCD2
它停止工作,因为空格破坏了正则表达式:/
如何改进我的正则表达式以允许捕获所有由空格分隔的单词?
解决方案
您可以使用
text.split(/\s+/).filter(x => /YOUR_VALIDATION_REGEX/.test(x))
笔记:
.split(/\s+/)
- 用空格分割字符串.filter(x => /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{4,}$/.test(x)
- 如果它与您的初始正则表达式匹配,则获取该项目。
查看 JavaScript 演示:
const text = "this is a phrase with ABC1 and ABCD2 but no ABC1!";
const rx = /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{4,}$/;
console.log(text.split(/\s+/).filter(x => rx.test(x)));
如果您使用,/^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{4,}$/
性能可以提高
/^(?=\D*\d)(?=[^a-zA-Z]*[a-zA-Z])[a-zA-Z0-9]{4,}$/
推荐阅读
- html - 在 Vuejs 鼠标悬停期间保存数组对象索引的数据属性
- reactjs - 如何在 reactjs 中使用 jwt-decode 库解码 JWT 令牌
- javascript - 每当单击链接时,该链接的 ngcontainer 的内容应该接管模式,但是如何使用多个 ngcontainer 来做到这一点?
- python - Python 脚本不会从命令行运行。它显示没有错误
- ssl - Libvirt 和 TLS 忽略 CA 文件设置
- r - 查找数据表中的原始数据是否包含列表中的至少一个单词
- regex - regex expression does not match as expected in Python
- javascript - 为什么只执行“else”语句?
- android - Android在调用WebRTC时将音频录制到文件控制器
- javascript - DOM 在 div 中的任意位置单击时获取图像 src