首页 > 解决方案 > 正则表达式仅适用于不以空格分隔的单个单词

问题描述

我有这个正则表达式,它在一个最小长度为 4 的单词中查找一个数字和一个字符:

^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{4,}$ 

它适用于:

ABCD1

但是如果我有多个单词,例如:

ABCD1 ABCD2

它停止工作,因为空格破坏了正则表达式:/

如何改进我的正则表达式以允许捕获所有由空格分隔的单词?

演示:https ://regex101.com/r/S3APfJ/1

标签: javascriptregexregex-lookarounds

解决方案


您可以使用

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,}$/

推荐阅读