正则表达式仅适用于不以空格分隔的单个单词
Regex works only with a single words not separated by whitespaces
我有这个正则表达式,它在一个最小长度为 4 的单词中查找一个数字和一个字符:
^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{4,}$
适用于:
ABCD1
但如果我有多个词,例如:
ABCD1 ABCD2
它停止工作,因为空格破坏了正则表达式:/
我如何改进我的正则表达式以允许捕获所有由空格分隔的单词?
您可以在输入中使用 match()
来查找所有匹配项:
var input = "1234 ABCD1 ABCD2 ABCDE";
var matches = input.match(/\b(?=\S*\d)(?=\S*[a-zA-Z])[a-zA-Z0-9]{4,}\b/g);
console.log(matches);
您可以使用
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,}$/
我有这个正则表达式,它在一个最小长度为 4 的单词中查找一个数字和一个字符:
^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{4,}$
适用于:
ABCD1
但如果我有多个词,例如:
ABCD1 ABCD2
它停止工作,因为空格破坏了正则表达式:/
我如何改进我的正则表达式以允许捕获所有由空格分隔的单词?
您可以在输入中使用 match()
来查找所有匹配项:
var input = "1234 ABCD1 ABCD2 ABCDE";
var matches = input.match(/\b(?=\S*\d)(?=\S*[a-zA-Z])[a-zA-Z0-9]{4,}\b/g);
console.log(matches);
您可以使用
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,}$/