使用RegEx精确查找随机字符串中的字母

Jos*_*sey 3 javascript regex string algorithm

这里的重点是确切的单词。这需要适用于任意数量的排列,因此希望我的例子很清楚。

给定一串随机字母,是否可以(使用RegEx)匹配给定字符串内的确切字母数量?

因此,如果我有一个str1包含字母的字符串(),ABZBABJDCDAZ并且想匹配字母JDBBAAstr2),则我的函数应该返回,true因为str1包含所有正确的字母足够多的时间了。然而,如果str1将被改变ABAJDCDA,那么该函数将返回false因为str2需要str1有至少2个字母的实例B

这是我到目前为止使用的范围:

const findLetters = (str1, str2) => {
  const regex = new RegExp(`[${str2}]`, 'g')
  const result = (str1.match(regex))
  console.log(result)
}

findLetters('ABZBABJDCDAZ', 'JDBBAA')
Run Code Online (Sandbox Code Playgroud)

如您所见,它匹配正确的字母,但是匹配它们的所有实例。有什么方法可以使用RegEx做我想做的事情吗?我之所以在此关注RegEx的原因是,我需要高度优化此代码,到目前为止,我的其他函数都使用Array.every()indexOf()太慢了。

注意:我的函数只需要返回一个true/false值。

Kam*_*ski 5

试试(这里我们对两个字符串的字母进行排序,然后创建regexp之类的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') );
Run Code Online (Sandbox Code Playgroud)

  • @JossClassey如果您需要优化性能,则可以使用该模式并将其优化为类似于“ AA。*?BB。*?D。*?J”的样式。好答案!:) (2认同)