这里的重点是精确地。这需要适用于任意数量的排列,因此希望我的示例足够清楚。
给出一串随机字母,是否可以(使用RegEx)匹配给定字符串内的确切字母数?
因此,如果我有一个包含字母str1
的字符串(ABZBABJDCDAZ
),并且想匹配字母JDBBAA
(str2
),则我的函数应该返回true
,因为str1
包含所有正确的字母足够次。但是,如果将str1
更改为ABAJDCDA
,则该函数将返回false
,因为str2
要求str1
至少具有字母B
的2个实例。
这是我到目前为止使用的范围:
const findLetters = (str1, str2) => {
const regex = new RegExp(`[${str2}]`, 'g')
const result = (str1.match(regex))
console.log(result)
}
findLetters('ABZBABJDCDAZ', 'JDBBAA')
您可以看到它与正确的字母匹配,但与它们的all实例匹配。有什么方法可以使用RegEx做我想做的事情吗?我之所以在此关注RegEx的原因是,我需要高度优化此代码,到目前为止,我使用Array.every()
和indexOf()
的其他函数太慢了。
注意:我的函数仅需要返回true/false
值。
尝试(这里我们对两个字符串的字母进行排序,然后创建像A.*A.*B.*B.*D.*J
这样的正则表达式)
const findLetters = (str1, str2) => {
const regex = new RegExp([...str2].sort().join`.*`)
return regex.test([...str1].sort().join``)
}
console.log( findLetters('ABZBABJDCDAZ', 'JDBBAA') );
console.log( findLetters('ABAJDCDA', 'JDBBAA') );